[英]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.