gpt4 book ai didi

java - 为什么在 java 中十六进制/字符串/字节转换后我得到的是 3 个字节而不是 1 个字节?

转载 作者:行者123 更新时间:2023-12-01 11:53:08 32 4
gpt4 key购买 nike

我有这个程序:

    String hexadecimal = "AF";
byte decimal[] = new byte[hexadecimal.length()/2];

int j = 0;
for ( int i = 0; i < decimal.length; i++)
{
decimal[i] = (byte) Integer.parseInt(hexadecimal.substring(j,j+2),16); //Maybe the problem is this statement
j = j + 2;
}

String s = new String(decimal);
System.out.println("TOTAL LEN: " + s.length());

byte aux[] = s.getBytes();
System.out.println("TOTAL LEN: " + aux.length);

第一个总数是“1”,第二个总数是“3”,我想我会在第二个总数中得到“1”。为什么会出现这样的情况呢?我的目的是生成另一个与原始字符串(AF)具有相同值的十六进制字符串,但我遇到了这个问题。

问候!

P.D.抱歉我的英语不好,如果我解释得很好,请告诉我。

最佳答案

不知道您到底想要实现什么目标。但请在下面找到您正在做什么。

Integer.parseInt(hexadecimal.substring(j, j + 2), 16) 返回 175(字节)175 是 -81new String(decimal) 尝试从此字节数组创建一个与当前字符集(可能是 UTF-8)相关的 String

由于字节数组不包含 UTF-8 字节的有效表示,因此创建的 String 包含 Unicode 代码点 U+FFFD 的“替换字符”。此代码点的 UTF-8 字节表示为 EF BF BD(或 -17 -65 -67)。这就是为什么第二个长度是三。

看看这里 Wikipedia UTF-8 。任何具有代码点 <= 7F 的字符都可以用单个字节表示。对于所有其他字符,第一个字节的第 7 位和第 6 位必须设置为 11......。但值 -81 的情况并非如此,它是 10101111。因为这不是一个有效的代码点,它被替换为“替换字符”。

关于java - 为什么在 java 中十六进制/字符串/字节转换后我得到的是 3 个字节而不是 1 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28631366/

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