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");
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");
Integer.parseInt(str, 16);
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
Tip bayt olduğunda aynı şekilde depolanan 30 ve 0x1e değerlerinin baytını nasıl ayırt edersiniz? –
@phpscriptcoder: Hayır, sen 1e alırsın. Bunu deneyin: Dize dönüşü = Integer.toHexString (Integer.parseInt (str, 16)); – erickson
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);
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 –
@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
@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. –
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);
: Neden '0xff'? –
& 0xff, int değerinin imzasız değerini almak için kullanılır. – JCasso
Bu kabul edilen cevap olmalı! Tam olarak ihtiyacım olan şeyi yapar! – VikingPingvin
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
Bu iyi bir soruydu. Neden kapatıldı? – Joe