我有两个字节数组,我想比较它们。我有一个这样的循环(为了清晰起见,它更像是一个 Javaish 循环):
for (i in 0..63) {
if (newArray[i] != oldArray[i]) {
return newArray[i] < oldArray[i]
}
}
例如,newArray[0]
是0x93
,oldArray[0]
是0x00
。这仍然返回 true(意味着newArray小于oldArray),因为它是作为有符号比较完成的。有没有比较绝对值(无符号)的方法?还是比较字节数组的集合?
1条答案
按热度按时间y0u0uwnf1#
您可以将有符号
Byte
转换为无符号字节值,方法是将其转换为更大的数据类型(如Int
,Long
),然后[按位与] it和0xFF
。如果你经常使用它,你可以创建一个扩展函数。
不幸的是,在低版本的Kotlin中(或者在没有启用实验功能的情况下),
Byte
和Short
中没有按位与操作:bitwise & doesn't work with bytes in kotlin而且,JVM没有无符号数据类型,除了
char
,它是2字节无符号的。Why doesn't Java support unsigned ints?
这就像Java中没有运算符重载一样。Kotlin增加了运算符重载,但添加无符号数据类型是更根本的问题,因为JVM本身没有它们。
你可以使用
zip
方法比较两个字节数组,但它会创建一个新的List
,所以它会比for循环方法慢。