2009-09-23 144 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

相關問題