【发布时间】:2016-11-12 01:36:53
【问题描述】:
为了从 4 个字的字符串中发送一大块位,我正在从字符串中获取字节数组并计算位串。
StringBuilder binaryStr = new StringBuilder();
byte[] bytesFromStr = str.getBytes("UTF-8");
for (int i = 0, l = bytesFromStr.length; i < l; i++) {
binaryStr.append(Integer.toBinaryString(bytesFromStr[i]));
}
String result = binaryStr.toString();
当我想做反向操作时出现问题:将位字符串转换为使用UTF-8编码的Java字符串。
请问,有没有人可以向我解释最好的方法?
提前致谢!
【问题讨论】:
-
我认为这是stackoverflow.com/questions/5499924/…的副本,至少我认为它会有所帮助。
-
无法逆转该操作。你不可能知道 100011010100110101100100 是 3 个字节,还是 4,或 5,或......你想达到什么目的?你为什么这样做?
-
如果您有字符串
"1a",那么它是由字符1和a构建的,它们被放置在Unicode 表中49、97的位置。在二进制形式中,它们应该表示为01100011100001。但是Integer.toBinaryString(49)的结果是110001而不是0110001(忽略前导0)。因此,正如 JB Nizet 指出的那样,无法检测111是否代表111或111或111或111。无论如何,您在这里所做的看起来像XY problem -
如果我有 4 个用 UFT-8 编码的字,则意味着我有 4 个字节,如果我没记错的话。在那种情况下,我认为我可以扭转操作。这是关于隐写术和数据泄露的 PoC。
-
"如果我有 4 个用 UFT-8 编码的单词意味着我有 4 个字节"你为什么这么认为?你能给我们指出一些给你这个想法的资源吗?您所说的可以解释为“utf-8 在一个字节上写入一个字”,但请尝试考虑一下有多少字,以及字节可以容纳多少个数字。
标签: java string utf-8 binary byte