これは私には奇妙です:Javaで実行すると
byte[] data = new byte[] { 50, -106, 40, -22, -94, -119, -52, 8 };
ByteBuffer bb = ByteBuffer.wrap( data );
System.out.println( bb.getLong() );
結果は3645145936617393160
C#で実行すると
//unsigned values (signed&0xff)
byte[] bytes = new byte[] { 50, 150, 40, 234, 162, 137, 204, 8 };
long l = BitConverter.ToInt64(bytes, 0);
System.Console.Write(String.Format("{0}\n", l));
System.Console.ReadKey();
結果は634032980358633010です
これを理解するのを手伝ってくれる?
ありがとう!
これがエンディアンの違いです。
バイト配列を逆にすると、期待どおりに機能します。
BitConverter.ToInt64(new byte[] { 8, 204, 137, 162, 234, 40, 150, 50 }, 0)
Javaでエンディアンを設定するには、を呼び出しbb.order(ByteOrder.LITTLE_ENDIAN)
ます。
ちなみに、これらのものを操作する最も簡単な方法は、LINQPadを使用することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加