在这里,我正在使用
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!这个逻辑可以阻止溢出.然而,正如有人在下面指出的那样,这是没有意义的,因为演员为你做了.也许有人在谨慎?