gpt4 book ai didi

java - 当第一位为 1 时,8 位字符串上的 parseInt 返回负值

转载 作者:行者123 更新时间:2023-12-01 22:19:15 25 4
gpt4 key购买 nike

我有一大串位(其中也有一些 \n),我将其作为参数传递给方法,该方法应该将位 8 × 8 隔离,然后将它们转换使用 parseInt() 全部转换为字节。

事情是这样的,每当 8 位的子串以 1 开头时,结果字节就是一个负数。例如,第一个子字符串是“10001101”,结果字节是-115。我似乎不明白为什么,有人可以帮忙吗?它与其他子字符串一起工作得很好。

如果需要的话,这是我的代码:

static String bitsToBytes(String geneString) {
String geneString_temp = "", sub;

for(int i = 0; i < geneString.length(); i = i+8) {
sub = geneString.substring(i, i+8);

if (sub.indexOf("\n") != -1) {
if (sub.indexOf("\n") != geneString.length())
sub = sub.substring(0, sub.indexOf("\n")) + sub.substring(sub.indexOf("\n")+1, sub.length()) + geneString.charAt(i+9);
}

byte octet = (byte) Integer.parseInt(sub, 2);

System.out.println(octet);

geneString_temp = geneString_temp + octet;
}

geneString = geneString_temp + "\n";

return geneString;
}

最佳答案

在Java中,byte是一个有符号类型,这意味着当最高有效位设置为1时,该数字被解释为负面。

这正是您在此处打印字节时发生的情况:

System.out.println(octet);

由于 PrintStream 没有采用单个字节的 println 重载,因此将调用采用 int 的重载。由于 octet 的最高有效位设置为 1,因此通过将其符号位复制到位 9..32 来对数字进行符号扩展,从而导致打印输出负数数量。

关于java - 当第一位为 1 时,8 位字符串上的 parseInt 返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com