繁体   English   中英

字符串作为\\ x03 \\ x00 \\ x00 \\ x00到整数

[英]String as \x03\x00\x00\x00 to integer

Helo:

我有一个问题,我在c中解决了,但是现在我想在hava中完成它:我有一个像这样的字符串:'\\ x03 \\ x00 \\ x00 \\ x00'这表示一个整数的十六进制值。 我转换为0x03 \\ 0x00 ...现在我想获取整数,但是我不知道如何在Java中进行操作

有人可以给我一些想法吗?

提前致谢

(是否可以通过某种方式直接使用此格式('\\ x03 \\ x00 \\ x00 \\ x00'而不使用byte []数组?在C语言中我可以直接使用此格式来构建整数(int)吗?)

这是我的一线解决方案

Integer.parseInt("\\x03\\x00\\x00\\x00".replaceAll("\\\\x", ""), 16)

当然,您可以将其包装在函数中。

我会做这样的事情:

Scanner sc = new Scanner(inputString);
int value = 0;
for (int i = 0; i < 4; i++) {
    sc.next("\\\\x");
    byte b = sc.nextByte(16);
    value = (value << 8) | (b & 0xff);
}
if (sc.hasNext()) {
    throw new SomeException("Unexpected stuff at the end");
}

更新 -更正了符号扩展错误...,并在输入字符串的末尾检测到意外内容。)

现在,如果遇到无法处理的输入,它将引发异常。 在这种情况下,它被设计为匹配一个完全为4个字节的序列。

但是(IMO)最好接受错误的输入并产生不正确的结果。 这就是使用模式匹配技巧避免执行正确解析的聪明解决方案的风险。


非常感谢您的回答,我不完全理解此解决方案,它给了我sc.next(“ \\\\ x”);中的错误。

发生错误的原因是,您在少于4个字节的字符串上使用此字符串,或者该字符串与示例格式完全不匹配。 如果您希望代码处理少于(或大于)4个字节的序列,则需要对其进行更改。

我想知道你为什么做: value=(value <<8) | b value=(value <<8) | b (但是我正在努力理解)非常感谢

好吧,那是一个错误。 我改正为

value = (value << 8) | (b & 0xff);

它正在做一些位纠结操作,以将字节b固定在value的数字的最低有效位上。 阅读Java <<移位运算符和按位&| 操作员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM