Java .Net Byte数组存储差异以及解决方法
最近在Java與.Net服務Bytes數據交互碰到一個問題:.Net IntToBytes結果和Java IntToBytes結果是反序的,查了一下發現:Java stores things internally as Big Endian, while .NET is Little Endian by default.
Big Endian:最高字節在地址最低位,最低字節在地址最高位,依次排列。
Little Endian:最低字節在最低位,最高字節在最高位,反序排列。
? ? ? 為什么要注意字節序的問題呢?你可能這么問。當然,如果你寫的程序只在單機環境下面運行,并且不和別人的程序打交道,那么你完全可以忽略字節序的存在。但是,如果你的程序要跟別人的程序產生交互呢?在這里我想說說兩種語言。C/C++語言編寫的程序里數據存儲順序是跟編譯平臺所在的CPU相關的,而JAVA編寫的程序則唯一采用big endian方式來存儲數據。試想,如果你用C/C++語言在x86平臺下編寫的程序跟別人的JAVA程序互通時會產生什么結果?就拿上面的0x12345678來說,你的程序傳遞給別人的一個數據,將指向0x12345678的指針傳給了JAVA程序,由于JAVA采取big endian方式存儲數據,很自然的它會將你的數據翻譯為0x78563412。什么?竟然變成另外一個數字了?是的,就是這種后果。因此,在你的C程序傳給JAVA程序之前有必要進行字節序的轉換工作。
?
Java解決方法:
1 int intValue = 12345; 2 byte[] bytes1 = ByteUtils.intToBytes(intValue); //[0, 0, 48, 57] 3 4 ByteBuffer byteBuffer = ByteBuffer.allocate(4); 5 byteBuffer.order(ByteOrder.LITTLE_ENDIAN); 6 byteBuffer.putInt(intValue); 7 byte[] bytes2 = byteBuffer.array(); //[57, 48, 0, 0]?
.NET解決方法:
System.BitConverter.GetBytes(value).Reverse().ToArray();?
轉載于:https://www.cnblogs.com/CopyPaster/p/5757309.html
總結
以上是生活随笔為你收集整理的Java .Net Byte数组存储差异以及解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 系列:基础知识储备
- 下一篇: ASP.NET Core中如影随形的”依