为什么需要对Java中的某些字符转换进行逐位“和”?
发布时间:2020-12-14 16:25:45 所属栏目: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[
在这里,我正在使用
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!这个逻辑可以阻止溢出.然而,正如有人在下面指出的那样,这是没有意义的,因为演员为你做了.也许有人在谨慎? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读