1 数据格式转换
1.1? 16 进制 定义和显示
val hexBytes = 0xFF_EC_DE_5E
print(hexBytes.toString(16).uppercase())
FFECDE5E Process finished with exit code 0
1.2 将字节转为16进制
字符串如何拼接呢?
我们使用%02X打印两个位置(02)的十六进制(X)值,并将其存储在字符串st中。
val bytes = byteArrayOf(12, 2, 15, 11)
for (b in bytes) {
var st:String=""
st = String.format("%02X", b)
println(st)
}
val st1="1a"
println(st1.toByte(16))
println(st1.toByte(16).toString(16))
Result:
26(10) 1a(16)
1.3 16进制与char 变量转换
? 以下方法可以将? 字节变量(10进制的)转为16进制数据。如果接受到16进制字符串,可以反向拆分,比较麻烦 需要charbyte ,一个字节对应2个数据。
fun bytesToHex(bytes: ByteArray): String {
val hexArray = "0123456789ABCDEF".toCharArray()
val hexChars = CharArray(bytes.size * 2)
for (j in bytes.indices) {
val v = (bytes[j] and 0xFF.toByte()).toInt()
//println(v.toString(16))
hexChars[j * 2] = hexArray[v ushr 4] // high 4 bit
// println(hexChars[j * 2] .toString())
hexChars[j * 2 + 1] = hexArray[v and 0x0F] // low 4bit
// println(hexChars[j * 2+1] .toString())
}
return String(hexChars)
}
val bytes = byteArrayOf(12, 2, 15, 11)
???????val s = bytesToHex(bytes)
println(s)
0C020F0B
2 记录
2.1 Data 数据类型
为了确保生成的代码的一致性以及有意义的行为,数据类必须满足以下要求:
- 主构造函数需要至少有一个参数;
- 主构造函数的所有参数需要标记为?
val ?或?var ;
data class Person(val name: String) {
var age: Int = 0
}
val person1 = Person("John")
println(person1)
结果是 Person("John")
数据类型打印的竟然是类名及其参数。。。Ref
2.2 类中可以引用 类名来申明
为啥类中可以用父类作为变量类型来申明?? 神奇。。
要使??个属性,只要?名称引?它即可,其目的是为了调用类中的各种属性。
data class Counter(val dayIndex: Int) {
operator fun plus(increment: Int): Counter { // 竟然类型为Counter?
return Counter(dayIndex + increment)
}
}
val count1 =Counter(2)
print(count1.plus(1))
Counter(dayIndex=3)
2.3 求余和取整
? ?这一块和其他语言一样。
val a=5
val b=2
println(a / b )//取整
println(a % b) //求余数
2 1
2.4 map
?这是 格式转换? 如何增加新值?
var map = mapOf("a" to 1, "b" to 2, "c" to 3)
//map("key")=4 // 出错
println(map["a"])
println(map["key"]) // 这里又不出错, why
1 null
2.5 数据交换
fun MutableList<Int>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // “this”对应该列表
this[index1] = this[index2]
this[index2] = tmp
}
val list = mutableListOf(1, 2, 3)
list.swap(0, 1) // “swap()”内部的“this”会保存“list”的值
println(list)
[2, 1, 3]
|