【问题标题】:Want to convert Decimal from signed 2's complement to hexdecimal without signed 2's complement (ex : -73 -> B7)想要将十进制从有符号 2 的补码转换为没有带符号 2 的补码的十六进制(例如:-73 -> B7)
【发布时间】:2022-01-06 05:03:12
【问题描述】:

我正在接收传感器数据,该数据向我发送来自有符号 2 的补码的十进制想要将其转换为没有带符号 2 的补码的十六进制十进制

【问题讨论】:

  • 你已经找到/写了什么来实现这个目标?因为 SO 在这里帮助您解决代码问题,所以当您有想法但尚未对此做任何事情时,它不是一个通用的帮助论坛。通读how to ask a good question,然后相应地更新您的帖子。
  • 这个问题中的大多数事情对我来说没有意义,或者是不可能的。也许我错了,但我希望传感器以十进制发送数据(造成这种混淆的一个常见原因是整数默认以十进制打印,但这并不意味着整数 is 十进制,它只是以这种方式打印),但将数据作为原始有符号字节发送(您可以以十六进制打印)。请澄清。
  • 是的,你是对的,它以字节发送,但传感器制造商提供了一个默认文件,以便解码字节并从有符号 2 的补码中给我十进制
  • 你必须使用那个默认文件吗?仍然可以从十进制表示进行转换,但这是可以避免的额外步骤
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: java hex iot gprs


【解决方案1】:
String decimal = "-73";
int number = Integer.parseInt(decimal);
String unsignedHex = String.format("%02X", number & 0xff);

parseInt 调用将带符号的十进制字符串转换为(带符号的)int 值。

format 调用将int 转换为大写十六进制的无符号字节字符串:

  • number & 0xff 表达式去掉了符号扩展。
  • "%02X" 格式在 2 个字符字段中表示大写十六进制 (X)。 0 表示零填充。阅读Format String Syntax 了解更多信息。

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2011-09-03
    • 2014-09-25
    • 2021-07-13
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多