2017-11-19 15 views
1

あなたは私がバイト配列を符号なしlongMAX_VALUE(すなわち2(POW)64 -1)を格納したい変換バイト[]符号なしロングJavaへの配列

のJavaに関連し、この疑問を..答えてくださいすることができ、 byte[]アレイを読み取ってこれを元に戻します。MAX_VALUE すべてのデータ型が署名されているので、byte[]の各インデックスに0xFF(各バイト)値を格納する方法、つまり符号付きビットを無視する方法を知りたいとします。これを行う方法をお勧めします。おかげさまで

+0

2の補数バイナリ表現に符号ビットはありません。 – Kayaman

+0

* "バイト配列" * Ok: 'byte [] b = {-1、-1、-1、 - }の符号なし' long'(すなわち2(pow)64 -1)の 'MAX_VALUE'を保存したいです。 1、-1、-1、-1} ' – Andreas

答えて

3

このようなものはありますか?

public class Utils { 
    static byte[] longToByteArray(long value) { 
     return ByteBuffer.allocate(8).putLong(value).array(); 
    } 

    static long byteArrayToLong(byte[] array) { 
     return ByteBuffer.wrap(array).getLong(); 
    } 

    public static void main(String[] args) { 
     long maxValue = Long.parseUnsignedLong("FFFFFFFFFFFFFFFF", 16); 
     byte[] b = longToByteArray(maxValue); 
     System.out.println("b = " + Arrays.toString(b)); 

     long value = byteArrayToLong(b); 
     System.out.println("value = " + value); 
     System.out.println("hex value = " + Long.toUnsignedString(value, 16)); 
    } 
} 
+0

' ByteBuffer'の使用はおそらく 'DataInputStream'/'DataOutputStream'を使うよりも優れています。オーバーヘッドが少なく、big-vs little-endianモードを選択するオプションがあります。 – Andreas

+0

また、 '' FFFFFFFF ''は' MAX_UNSIGNED_INT'のみです。 'MAX_UNSIGNED_LONG'には2倍の値、つまり' 'FFFFFFFFFFFFFFFF ''が必要です。 – Andreas

+0

@Andreas絶対に。今修正されました。あまりByteBufferにはあまり使われていないので、これを使うのが最善の方法だと思います。 –

関連する問題