如果这是重复的,首先,我很抱歉我一直在四处寻找,我还没有找到如何解决我的问题(或者我的脑袋太乱了)。
我认为如果我抛出问题而不是解释它会更好。
我有一个 int 234
的整数值。我将此值转换为十六进制字符串表示形式EA
。请注意,这是"EA"
,它是一个字符串。
然后我使用Integer.parseInt
将其转换为0xEA
(这是十六进制值,而不是十六进制字符串),最后我需要此值的ASCII(或字符)表示。
问题在于,当我使用Integer.toHexString
对其进行解码时,我得到C3AA
而不是EA
This是我发现的最佳解释。但我仍然不知道如何解决它..
我希望你能帮助我!提前谢谢!
修改
我想在UDP数据报中传输int 234
,这就是我使用转换的原因。 (这个UDP通道主要发送ASCII(“234”),但我想要一个例外,偶尔用ony 1byte传输它。这就是为什么我做所有这些转换(也许它比这更容易,但我想我'我太接近了我无法清晰看到的问题)
我可以在C
中轻松地做到这一点,但我需要在Java
中这样做。我的脑袋疯了。
所以234
toHexString变为`hex =“EA”;
// HEX -> ASCII code
for(int i=0; i<hex.length()-1; i+=2 ){
String output = hex.substring(i, (i + 2));
int decimal = Integer.parseInt(output, 16);
result.append((char)decimal);
}
return result.toString();
结果我得到了一个奇怪的角色(@fadden所说的那个)。现在提一个问题:这个值是2字节长吗?
我发送这个奇怪的字符,当我使用str = Integer.toHexString(prevResult);
时,我得到了C3AA。
也许我搞砸了,但我想要的只是传输0xEA(字节)并在另一端获得int 234
。
例如,假设我想发送“COMMAND”一词并附加值234.通常我会发送“COMMAND234”但现在我需要命令值只有一个字节长。所以我要传输的十六进制表示将是:
0x67 0x79 0x77 0x77 0x65 0x78 0x68 0xEA
C O M M A N D 234