gpt4 book ai didi

java - 如何转换十六进制值(例如 : 0xD1) to a unsigned Byte in Java?

转载 作者:行者123 更新时间:2023-12-02 04:33:36 30 4
gpt4 key购买 nike

我正在尝试获取十六进制值并将它们移动到字节数组中。当我这样做时,他们并没有转变为我需要的样子。其中大部分都转换为负数。例如,执行C#代码“baCommandPDI[0] = 0xD1;”后,baCommandPDI[0]的值为“209”。这就是我需要的。无论我在 Java 中尝试什么,该值都是“-47”。我需要它在字节数组中为“209”,因为该字节数组是通过 TCP/IP 发送到某些外部硬件的。外部硬件无法将-47解释为209。它必须是209。我尝试了以下代码:

int intTemp = 0xD1;执行此行后,intTemp 的值为 209,太棒了!

int intHexValue = 0xD1 & 0xFF;执行此行后,intHexValue 的值仍然是 209,我不明白怎么回事,但它是什么。

baCommand[0] = (字节) intHexValue;执行此行后,baCommand[0] 的值为 -47,错误。这不是我想要的。每次它将值转换为字节时,都会对其进行签名。

还有其他方法可以做到这一点吗?我可以使用 11010001 以及如何将该值分配给一个字节而不使其为负数吗?

最佳答案

在 Java 中,字节总是带符号的。但就像另一种语言中的无符号字节一样,仍然使用 8 位。 209(无符号)和-47字节表示形式是相同的。

1101 0001

唯一的区别是 Java 如何解释无符号类型中最高有效位 -128 与 128。差别是256,也就是209-47之间的差别。您可以按原样发送该值,因为位值是相同的,只是该位模式的解释不同。

如果您想将值 -47 转换为 209 以在 Java 中说服自己,您可以将该类型提升为更长的原始类型并屏蔽掉最后一个8 位。这一行将执行此操作,因此您可以调试并查看这些位是相同的并且未签名的版本是等效的。

int test = baCommandPDI[0] & 0xFF;

打印/调试test会让您看到值209

关于java - 如何转换十六进制值(例如 : 0xD1) to a unsigned Byte in Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31122691/

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