日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Java .Net Byte数组存储差异以及解决方法

發布時間:2024/4/17 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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数组存储差异以及解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。