Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将十六进制字符串转换为字节_Java_String_Type Conversion_Byte - Fatal编程技术网

在Java中将十六进制字符串转换为字节

在Java中将十六进制字符串转换为字节,java,string,type-conversion,byte,Java,String,Type Conversion,Byte,在Java中,如何将字节(例如“1e”)的十六进制字符串表示形式转换为字节值 例如: byte b = ConvertHexStringToByte("1e"); 将通过解析字符串表示返回一个字节 使用带有(String,int)签名的方法,可以将基数指定为16,因此可以解析字节的十六进制表示: Byte.parseByte("1e", 16); 您可以使用Byte.parseByte(“a”,16) 但这只适用于127以下的值, 由于有符号/无符号问题,值高于需要强制转换为字节的值 所以我

在Java中,如何将字节(例如“1e”)的十六进制字符串表示形式转换为字节值

例如:

byte b = ConvertHexStringToByte("1e");
将通过解析字符串表示返回一个
字节

使用带有
(String,int)
签名的方法,可以将基数指定为16,因此可以解析字节的十六进制表示:

Byte.parseByte("1e", 16);

您可以使用
Byte.parseByte(“a”,16)
但这只适用于127以下的值,
由于有符号/无符号问题,值高于需要强制转换为字节的值
所以我建议将其转换为int,然后将其转换为byte

(byte) (Integer.parseInt("ef",16) & 0xff);

我试过了,但这会创建一个int,而不是字节——所以对于“1e”,即使我转换为一个字节,我也会得到30,而不是0x1e。您如何区分值为30和0x1e的字节,它们在类型为byte时存储相同?@phpscriptcoder:不,您会得到1e。试试这个:String roundtrip=Integer.toHexString(Integer.parseInt(str,16));危险!此方法将无法解析负字节值,例如“AD”。看见最好使用整数。parseInt@DaveL.这是不正确的,因为根据评估者的说法:所讨论的方法的行为完全符合规定。使用这种方法,负值必须用减号“-”表示,而不是通过高阶位为1来设置符号位。换句话说,对于基数16,有效字符串的范围为“-80”(-128)到“7f”(127);“AD”基16为正173,超出范围。@LAS_VEGAS确实是Byte.parseByte按指定执行,但是如果有人想将8位值的2字符十六进制表示转换为提问者暗示的相应字节,则此方法(按指定和实现!)对于高阶位为1的值,不会这样做。Dave对解析负字节有何评论?那么你的问题是什么?如果有的话?这是个好问题。为什么要关门?同意@Joe的说法。但也请参见&0xff用于获取int的无符号值。这应该是可接受的答案!它正是我所需要的!
(byte) (Integer.parseInt("ef",16) & 0xff);