为什么需要对Java中的某些字符转换进行逐位“和”?

前端之家收集整理的这篇文章主要介绍了为什么需要对Java中的某些字符转换进行逐位“和”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在这里,我正在使用 Java到C#样本应用程序翻译,涉及加密(AES和RSA等等……)

在Java代码(实际工作并被转换为C#)的某个时刻,我发现了这段代码

for (i = i; i < size; i++) {
    encodedArr[j] = (byte) (data[i] & 0x00FF);
    j++;
} // where data variable is a char[] and encodedArr is a byte[]

经过一些谷歌搜索(here),我发现这是一个主要在Java代码上的常见行为…

我知道char是一个16位类型,字节只有8位,但我无法理解这种按位的原因和char->字节转换的操作.

有人能解释一下吗

先感谢您.

解决方法

当您将0x00FF转换为二进制时,它变为0000 0000 1111 1111

当你和任何有1的东西时,它本身就是:

1&& 1 = 1,0&& 1 = 0

当你和任何一个0时,它是0

1&& 0 = 0,0&& 0 = 0

当此操作发生时,encodedArr [j] =(byte)(data [i]& 0x00FF);它只占用数据的最后8位和最后8位并存储它.它丢弃前8位并存储最后8位

之所以需要这是因为一个字节被定义为8位值.按位并存在以阻止潜在的溢出 – > IE将9位分配给一个字节

Java中的char是2 bytes!这个逻辑可以阻止溢出.然而,正如有人在下面指出的那样,这是没有意义的,因为演员为你做了.也许有人在谨慎?

猜你在找的Java相关文章