加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读