2009-09-23 145 views
6

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

例如:

byte b = ConvertHexStringToByte("1e"); 
+0

所以你有什么问题?如果有的话? – EJP 2013-09-12 10:59:45

+0

这是一个很好的问题。它为什么关闭? – Joe 2017-01-13 00:07:29

回答

15
Integer.parseInt(str, 16); 
+0

我尝试过,但创建一个int,而不是一个字节 - 所以对于“1e”我会得到30,而不是0x1e,即使我投到一个字节。 – phpscriptcoder 2009-09-23 16:12:45

+1

如何区分值为30和0x1e的字节,字节类型是否相同? – 2009-09-23 16:22:01

+2

@phpscriptcoder:不,你会得到1e。试试这个:String roundtrip = Integer.toHexString(Integer.parseInt(str,16)); – erickson 2009-09-23 16:24:38

12

Byte.parseByte将通过解析字符串表示返回byte

使用与(String, int)签名的方法,基数可以被指定为16,所以可以分析一个字节的十六进制表示:

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

危险!此方法将无法解析负值字节值,例如“AD”。请参阅http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6259307。最好使用Integer.parseInt – 2010-05-28 16:31:41

+1

@Dave L.这是不正确的,因为根据评估者:所讨论的方法的行为完全如指定。使用此方法时,必须使用负号“ - ”指示负值,并且不要通过将高位设置为1来设置符号位。换句话说,对于基数16,有效字符串的范围从“-80”(-128)到“7f”(127); “AD”基座16为正值173,超出范围。 – Caner 2011-11-29 11:38:53

+1

@LAS_VEGAS确实Byte.parseByte按指定执行,但如果有人想要将8位值的2个字符的十六进制表示转换为相应的字节,如提问者所暗示的,则此方法(如指定和实现的!)将对于高位为1的值,不要这样做。 – 2011-11-29 17:37:23

19

您可以使用Byte.parseByte("a", 16); 但这只会工作的价值多达127个, 值高那么将需要转换为字节,由于符号/无符号的问题 ,所以我建议把它转移到一个int,然后将它转换为字节

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

:为什么&0xff? – 2014-04-09 13:14:16

+1

&0xff用于获取int的无符号值。 – JCasso 2014-06-11 21:35:39

+1

这应该是公认的答案!它正是我所需要的! – VikingPingvin 2016-07-12 07:47:01

相关问题