2009-09-23 24 views
6

Java'da, bir baytın onaltılık bir dize temsili (örn. "1e") bir bayt değerine nasıl dönüştürülebilir? ÖrneğinBir hex dizgisini Java'da bir byte dönüştürün

:

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

byte yüksek o zaman en fazla 127, değerleri nedeniyle yüzden int transfer ve ardından dökme tavsiye imzalı/imzasız sorunları nedeniyle, byte için döküm gerekecektir sorunuz nedir? Varsa? – EJP

+0

Bu iyi bir soruydu. Neden kapatıldı? – Joe

cevap

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

Bunu denedim ama bu bir bayt değil bir int oluşturur - yani "1e" için, bir bayta atsam bile, 0x1e değil, 30 alırdım. – phpscriptcoder

+1

Tip bayt olduğunda aynı şekilde depolanan 30 ve 0x1e değerlerinin baytını nasıl ayırt edersiniz? –

+2

@phpscriptcoder: Hayır, sen 1e alırsın. Bunu deneyin: Dize dönüşü = Integer.toHexString (Integer.parseInt (str, 16)); – erickson

12

Byte.parseByte bir dize temsilini ayrıştırma yoluyla bir byte dönecektir. (String, int) imzayla yöntemi kullanarak

, sayı tabanı biri byte bir onaltılık gösterimini ayrıştırmak, böylece 16 olarak belirtilebilir:

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

Tehlike! Bu yöntem, negatif bayt değerlerini, örneğin "AD" ayrıştırmakta başarısız olur. Http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6259307 adresine bakın. Integer.parseInt –

+1

@Dave L kullanmak daha iyidir. Bu doğru değil çünkü Değerlendiriciye göre: Söz konusu yöntem tam olarak belirtildiği gibi davranıyor. Bu yöntemle, eksi işareti "-" kullanılarak negatif bir değer belirtilmelidir ve yüksek sipariş biti bir olmak suretiyle işaret biti ayarlanmamalıdır. Başka bir deyişle, taban 16 için geçerli dizgiler "-80" (-128) ila "7f" (127) arasında değişir; "AD" tabanı 16, aralık dışı olan 173 pozitiftir. – Caner

+1

@LAS_VEGAS Gerçekten Byte.parseByte, belirtilen şekilde gerçekleştirir, ancak birisi, 8 bitlik bir değerin 2 karakterlik bir hex temsilini, sorgunun belirttiği gibi, karşılık gelen bayta dönüştürmek istiyorsa, bu yöntem (belirtildiği ve uygulandığı gibi) yüksek sipariş bitinin 1 olduğu değerler için bunu yapmayın. –

19

Sen Byte.parseByte("a", 16); kullanabilirsiniz ancak bu değerler için yalnızca çalışacak o yüzden

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

: Neden '0xff'? –

+1

& 0xff, int değerinin imzasız değerini almak için kullanılır. – JCasso

+1

Bu kabul edilen cevap olmalı! Tam olarak ihtiyacım olan şeyi yapar! – VikingPingvin

İlgili konular