2016-07-08 6 views
0

私のバイト配列に問題があります。私はそれを長いものに変換し、次に16進数に変換してトーストとして表示しようとします。しかし、私はjava.nio.BufferUnderflowExceptionを取得します。ここに私のコードは次のとおりです。[]バイトをlongに変換するときのjava.nio.BufferUnderflowException

public void onReceivedData(byte[] arg0) 
     { 
      String tag = null; 
      long tagValue = ByteBuffer.wrap(arg0).getLong(); 
      tag = Long.toHexString(tagValue).toUpperCase(); 

} 

問題はラインである:私はこの例外についての情報を探しましたが、答えのどれも私の問題の解決策ではなかった

 long tagValue = ByteBuffer.wrap(arg0).getLong(); 

これはlogcatです:だから

arg0 = Arrays.copy(arg0, 8); 

:あなたはバイトの可変数を持っているように見えるとして

Process: com.example.eltegps011.eltegps, PID: 17304 
                       java.nio.BufferUnderflowException 
                        at java.nio.ByteArrayBuffer.getLong(ByteArrayBuffer.java:211) 
                        at com.example.eltegps011.eltegps.fragments.StocktakingFragment$9.onReceivedData(StocktakingFragment.java:504) 
                        at com.felhr.usbserial.UsbSerialDevice$WorkerThread.onReceivedData(UsbSerialDevice.java:261) 
                        at com.felhr.usbserial.UsbSerialDevice$WorkerThread.run(UsbSerialDevice.java:235) 
+1

arg0にのサイズをチェックして、サイズが間違っている場合は、必要なものを行います。 8のマルチレールは正しい選択であるようです。 – FlanschiFox

+0

arg0を動的に設定することはできますか? – Bartos

+0

私はあなたが何をすべきかわからない。バイト配列は単にバイトバッファ内に置かれます。したがって、ByteBufferをcangeできれば、バイト配列も変更の影響を受けます。あ、はい。 arg0はconstではありません。従って他のはい。 – FlanschiFox

答えて

-1

はByteBufferの

ByteBuffer byteBuffer = ByteBuffer.wrap(arg0); 
      if(byteBuffer.remaining()>0){ 
       long tagValue= byteBuffer.getLong(); 
       tag = Long.toHexString(tagValue).toUpperCase(); 
      } 
0

からlong値を取得する前にチェックを追加します。あなたは長さが8バイトあります:xx xx ... 00 00


それともあなただけのバイト配列の進ダンプを必要とする:

public String bytesToString(byte[] bytes) { 
    StringBuilder sb = new StringBuilder(bytes.length * 3); 
    for (int i = 0; i < bytes.length; ++i) { 
     sb.append(String.format("%02X ", 0xFF & bytes[i])); 
    } 
    return sb.toString(); 
} 
+0

私はまだ2つの配列を取得します:/最初に1バイトと2番目の8バイトを持っています。 – Bartos

+0

解答を拡張し、16進ダンプを付けて、2桁の16進数の後にスペースを追加して分かりやすくしました。 –

+0

Joop thx、それでも動作します:07-08 10:22:57.181 15705-16302/com.example.eltegps011.eltegps E/StocktakingFragment:onReceivedData:DA 07-08 10:22:57.181 15705-16302/com .example.eltegps011.eltegps E/StocktakingFragment:onReceivedData:AD 06 74 01 6F 6B 26 0B – Bartos

関連する問題