好的,一位朋友帮助了我一点点这段代码。我了解除了一件事情外,其他所有事情以及为什么要这样做。这128个来自哪里?同样,该程序运行,从文件中提取字符串,将其转换为二进制,但是将所有空格都删除了,因此,当您将二进制重新转换回字符串时,它就是一个单词。那么什么是128,我该怎么做才能保留空间?
/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * *我已解决问题,感谢您的帮助!* *我已经更改了代码,因此您可以查看如何修复它。* * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * /
public static void main(String[] args) {
String text = "My string to binary works too";
byte[] bytes = text.getBytes();
StringBuilder binary = new StringBuilder();
for (byte b : bytes){
int val = b;
for (int i = 0; i < 8; i++){
binary.insert(0, (val & 1) == 0 ? 0 : 1);
val >>>= 1;
}
binary.insert(0, ' ');
System.out.print(binary);
}
}
}
正如其他人所说,128只是MSB中1的位掩码。
如果您有一个字节10011001,请遵循以下逻辑:
10011001 & 10000000 = 10000000 != 0
11011001 << 1 = 00110010
00110010 & 10000000 = 00000000 == 0
and so on...
这是可以实现相同功能但相反的替代逻辑(LSB中的掩码),也许更直接地有意义:
int val = b;
for (int i = 0; i < 8; i++)
{
binary.insert(0, (val & 1) == 0 ? 0 : 1);
val >>>= 1;
}
binary.insert(0, ' ');
通过遵循以下逻辑,您可以:
10011001 & 00000001 = 00000001 != 0
11011001 >>> 1 = 01101100
01101100 & 00000001 = 00000000 == 0
and so on...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句