【问题标题】:Java hex string concatenate checksumJava 十六进制字符串连接校验和
【发布时间】:2015-05-21 22:48:31
【问题描述】:

我想用 java 中的校验和向设备发送十六进制消息。

    String msg = "\u0002\u0053\u003F\u0003";
    String checksum = "\u00EE";
    String last = "\u0004";
    msg = msg + checksum + last;
    sendmessage(msg);

如果我像上面那样对校验和进行硬编码,它就可以工作。但是如果我动态插入校验和,它不会。这是我尝试过的

String msg = "\u0002\u0053\u003F\u0003";
String checksum = String.format("\\u00%2X",238); // decimal 238 = Hex \u00EE
String last = "\u0004";
msg = msg + checksum + last;
sendmessage(msg) ; //getting invalid checksum because it is not inserted properly

请问有什么路线吗?

【问题讨论】:

  • ...看在 Hermaeus Mora 的份上,请修复您的拼写问题!这不是短信对话,这是 StackOverflow。所有问题和答案都应该是写得很好、清晰、正确的英语,并带有漂亮的小东西,例如主题和文章以及适当的大写(“I want to send a hex message...") 并且没有丢失的字母或多余的空格("If I hard [no space] 代码...") 和正确的标点符号 ("...it works [no space] , but if I...") 和所有这些好东西!

标签: java string hex concatenation checksum


【解决方案1】:

\uxxxx 语法由 Java 编译器处理,它不是文字。听起来你想要的很简单:

String msg = "\u0002\u0053\u003F\u0003";
char checksum = (char)238;
String last = "\u0004";
msg = msg + checksum + last;
sendmessage(msg);

【讨论】:

  • 感谢@bkail,它解决了我的问题。你太棒了!!
  • @QPaysTaxes 我想过这个问题,但最终这取决于 sendmessage。我最终得出结论,正在(尴尬地)使用 String 来保存一个字节数组。
  • @bkali 这里最好的解决方案是什么。现在,如果值为 1(long var = 1,按照您的建议强制转换为 char),则它不起作用。我要做的就是用 checksum 创建一个十六进制字符串。我觉得很难。最初我尝试使用 0x 格式,再次连接在那里很困难。感谢您的指示
  • @user3124284 如果您只想要一个十六进制格式的字符串,请使用Long.toString(var, 16)String.format("%016x", var)。您的原始帖子暗示您想在字符串中提供校验和作为文字字符(字节?)。没有办法将 long 打包成单个字节/字符,但您可以使用 (char)(var >> 48) + (char)(var >> 32) + (char)(var >> 16) + (char)var 打包成字符(或更多/更小的班次打包成包含字符串的字节),但我想不清楚你是什么'正在尝试做。
  • @bkali,如果我不清楚,对不起。这就是我想要做的: message = new String(new byte[]{(byte)0x2,(byte)0x53} ) i = 1; // 0x31 校验和 = 238 // 0xEE(校验和将始终为
猜你喜欢
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2019-07-27
  • 2013-07-26
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
相关资源
最近更新 更多