1. 程式人生 > >java、c++網路通訊時的位元組順序

java、c++網路通訊時的位元組順序

目前的位元組順序有兩類:BIG_ENGIAN和LITTLE_ENDIAN。各個平臺所支援的位元組序不同,例如AIX、Tru64Unix、Windows等作業系統平臺採用LITTLE_ENDIAN位元組序,Solaris等作業系統平臺採用BIG_ENGIAN。Java自身採用的是BIG_ENGIAN位元組序,當java和執行在其他平臺上的其他語言編寫的通訊程式通訊時,則必須考慮到資料的位元組序。

解決int值傳輸的方法: 

把int值用byte陣列按C/C++的方式來表示int,發資料時先轉換,收資料時收到後在轉換成int。

public void IntToBytes(byte[] pack, int index, int value) {
        pack[index] = (byte) value;
        pack[index + 1] = (byte) (value >> 8);
        pack[index + 2] = (byte) (value >> 16);
        pack[index + 3] = (byte) (value >> 24);
    }
 
    public int BytesToInt(byte[] pack) {
        return BytesToInt(pack, 0);
    }
 
    public int BytesToInt(byte[] pack, int index) {
        int a = pack[index];
        int b = pack[index + 1];
        int c = pack[index + 2];
        int d = pack[index + 3];
 
        if (a < 0) {
            a += 256;
        }
        if (b < 0) {
            b += 256;
        }
        if (c < 0) {
            c += 256;
        }
        if (d < 0) {
            d += 256;
        }
        int value = a | b << 8 | c << 16 | d << 24;
        return value;
    }


相關推薦

javac++網路通訊位元組順序

目前的位元組順序有兩類:BIG_ENGIAN和LITTLE_ENDIAN。各個平臺所支援的位元組序不同,例如AIX、Tru64Unix、Windows等作業系統平臺採用LITTLE_ENDIAN位元組序,Solaris等作業系統平臺採用BIG_ENGIAN。Java自身採用

網路通訊位元組序轉換原理與網路位元組大端和小端模式

     原因如下:網路協議規定接收到得第一個位元組是高位元組,存放到低地址,所以傳送時會首先去低地址取資料的高位元組。小端模式的多位元組資料在存放時,低地址存放的是低位元組,而被髮送方網路協議函式傳送時會首先去低地址取資料(想要取高位元組,真正取得是低位元組),接收方網路協議函式接收時會將接收到的第一個位元

C#用於網路通訊預先判斷到指定IP是否暢通方法

此段程式碼只是用於通訊值錢對到指定IP是否暢通進行判斷,如果採用標準Soketct方式可忽略此方法。需要引用using System.Net.NetworkInformation;程式碼內容 #region call前判斷 public static bool

程式設計師進階之路(CC++JavaPython經典書籍及學習順序)

程式設計師進階之路 初級: 《計算機程式的構造和解釋》 C語言: 1.《C語言程式設計:現代方法:第2版》 2.《C Primer Plus 第五版》 3.《C程式設計語言(第2版·新版)》 4.《C和指標》 5.《C專家程式設計》 6.《C 陷阱與缺陷》 7.《資料結構C

UDP協議網路Socket程式設計(java實現C/S通訊案例)

我的部落格園:https://www.cnblogs.com/chenzhenhong/p/13825286.html   我的CSDN部落格:https://blog.csdn.net/Charzous/article/details/109016215 目錄 一、前言:認識UDP 二、UDP的特

JavaC++PythonRubyPHPC#和JavaScript的理解

皮膚 叔叔 保持 大學 學校 cti java 等等 無需 Java、C++、Python、Ruby、PHP、C#和JavaScript和日本動漫裏的那些大家熟悉的動漫人物結合起來。依據他們的身世、個人經歷來生動的表達各編程語言的發展歷程。原文內容例

JavaC#雙語版配套AES加解密示例

rijndael rand encrypt encoding res ace secret names tar   這裏采用的加解密使用base64轉碼方法,ECB模式,PKCS5Padding填充,密碼必須是16位,否則會報錯!   模式:Java的ECB對應C#的Sys

Notepad++一鍵編譯運行(PythonJavaC++)

nbsp cnblogs anaconda not ont tps -o d+ 命令 Python 需要事先安裝Python配置好環境變量。建議使用Anaconda,方便。 在Notepad按F5,輸入如下   cmd /k chdir /d $(CURRENT_DI

天天 JavaC/C++,可這五種編程語言你知道嗎?

計算機 scrip rip 生存 腳本 價值 本質 號稱 c++ "適者生存,優勝劣汰”,編程語言同樣適用。 世界上有超過 1500 種編程語言,雖然本質上都是對於最底層 0 與 1 的抽象和封裝,但是卻沒有哪一種編程語言可以解決所有的問題。當有新的問題領域出現時

JavaCC++C#phppython語言的內在特性及應用

當你選擇了網際網路這個行業也就意味著你要終身學習,想必現在的你一定驚歎網際網路的發展速度吧! 網際網路行業不比傳統行業,不是說你精通一門手藝就可以一輩子靠這個手藝來養活自己,網際網路行業沒有這回事,如果你想問有沒有哪一門語言學完之後可以養活自己一輩子,那麼抱歉,我想沒人能回答你。 網際網路發

天天 JavaC/C++,可這五種程式語言你知道嗎?

"適者生存,優勝劣汰”,程式語言同樣適用。 世界上有超過 1500 種程式語言,雖然本質上都是對於最底層 0 與 1 的抽象和封裝,但是卻沒有哪一種程式語言可以解決所有的問題。當有新的問題領域出現時,就需要創造新的程式語言來適配它。這也就導致了不同的計算機語言擁有不同的“個性”——除去 Python、Jav

手機驗證碼免費10條javaC#html....

mage 短信 無線 查看 bubuko lan com htm nbsp 使用互億無線短信接口網址:http://www.ihuyi.com/. 首先第一步,進行註冊 第二步:註冊成功後進來的頁面 第三步:實名認證 第四步:個人信息 等待認證成功後才能繼續操作

201712-1最小差值(JavaC++Python)

題目描述 給定n個數,請找出其中相差(差的絕對值)最小的兩個數,輸出它們的差值的絕對值。 輸入格式   輸入第一行包含一個整數n。   第二行包含n個正整數,相鄰整數之間使用一個空格分隔。 輸出格式   輸出一個整數,表示答案。 樣例輸入 5 1 5 4 8 20 樣例輸出 1 樣例

20190301跳一跳(JavaC++Python)

問題描述 近來,跳一跳這款小遊戲風靡全國,受到不少玩家的喜愛。   簡化後的跳一跳規則如下:玩家每次從當前方塊跳到下一個方塊,如果沒有跳到下一個方塊上則遊戲結束。   如果跳到了方塊上,但沒有跳到方塊的中心則獲得1分;跳到方塊中心時,若上一次的得分為1分或這是本局遊戲的第一次跳躍則此

20180902買菜(JavaC++Python版本)

題目描述 小H和小W來到了一條街上,兩人分開買菜,他們買菜的過程可以描述為,去店裡買一些菜然後去旁邊的一個廣場把菜裝上車,兩人都要買n種菜,所以也都要裝n次車。具體的,對於小H來說有n個不相交的時間段[a1,b1],[a2,b2]…[an,bn]在裝車,對於小W來說有n個不相交的時間

20190901賣菜(JavaC++Python版本)

題目描述 在一條街上有n個賣菜的商店,按1至n的順序排成一排,這些商店都賣一種蔬菜。   第一天,每個商店都自己定了一個價格。店主們希望自己的菜價和其他商店的一致,第二天,每一家商店都會根據他自己和相鄰商店的價格調整自己的價格。具體的,每家商店都會將第二天的菜價設定為自己和相鄰商店第

JavaCC+ +PHPPython分別用來開發什麼?一篇文章告訴你!

我自己是一名大資料架構師,目前辭職在做線上教育大資料講師,每天都會直播分享免費公開課,大家可以加群參加。以及我自己整理了一套最新的大資料學習系統教程,包括Hadoop,資料探勘,資料分析。送給正在學習大資料的小夥伴!這裡是大資料學習者聚集地,歡迎初學和進階中的小夥伴!加QQ群:5849001

Python 憑什麼碾壓JavaC++等語言?它的Slogan 2.0你知道麼?

隨著時代的發展,Python成為了語言排行的常青樹,在當下的人工智慧浪潮中,Python可以說是C位出道。 學習Python中有不明白推薦加入交流群                 號:516107834 &

利用Thrift使JavaC#進行通訊

struct UserProfile{ 1:i32 id, 2:string name, 3:string blurb } service UserStorage{ vo

Java nio完成網路通訊(三)

使用Java nio實現網路通訊。 以下是用nio實現簡單網路通訊的demo /** * 使用NIO完成網路通訊 * *1.通道channel:負責連線 * java.nio.channels.Channel * |--selectableChannel *