ASCII
新建AsciiDemo.kt
举个栗子:获取a的ascii
fun main(args:Array<String>) {
//获取字符ascii编码
val c: Char = 'a'
//字符转成十进制
val value: Int = c.toInt()
println(value)//97
}
举个栗子:获取多个字符的ascii
//获取多个字符
val str:String = "I love you"
//遍历获取每个字符的ascii
val array = str.toCharArray()
val stringBuilder = StringBuilder()
for(ch in array){
//println(ch)
val result = ch.toInt()
stringBuilder.append(result.toString()+" ")
}
println(stringBuilder.toString())
改造以上的栗子
//获取多个字符
//获取多个字符
val str = "I love you"
//遍历获取每个字符的ascii
val array = str.toCharArray()
val result = with(StringBuilder()){
for(ch in array){
//println(ch)
val result = ch.toInt()
append(result.toString()+" ")
}
toString()
}
println(result)
凯撒加密算法
举个栗子:A->B
//移动字符
val c = 'A'//->B
//获取ascii
var ascii = c.toInt()
val key = 1
//移动
ascii += key
val result = ascii.toChar()
println(result)//B
加密字符串
class CaesarCrypt {
/**
* 加密
* @param command 原文
* @param key 密钥
*/
fun encrypt(command: String, key: Int): String {
val charArray = command.toCharArray()
return with(StringBuilder()) {
charArray.forEach {
var ascii = it.toInt()
ascii += key
append(ascii.toChar())
}
toString()
}
}
}
fun main(args: Array<String>) {
val command = "I love you"
val key = 1//密钥
println(CaesarCrypt().encrypt(command, key))
}
解密字符串
/**
* 解密
* @param command 加密的密文
* @param key 密钥
*/
fun decrypt(command: String, key: Int): String {
val charArray = command.toCharArray()
return with(StringBuilder()) {
charArray.forEach {
var ascii = it.toInt()
ascii -= key
append(ascii.toChar())
}
toString()
}
}
println(CaesarCrypt().decrypt("J!mpwf!zpv",1))
之前是知道密钥的情况。如果不知道密钥的时候,可以使用频度分析法
val ch = 'A'
val ascii = ch.toInt()
//二进制
val binary = Integer.toBinaryString(ascii)
println(binary)//1000001,8位,1个英文字符占1个字节