大端字節(jié)序、小端字節(jié)序的相互轉換

2017年下半年應公司需求要寫一個日志系統(tǒng)的SDK,日志上報協(xié)議使用TCP協(xié)議,通過長鏈接上報,格式如下:


當然我們這里不討論SDK的設計實現(xiàn),這里我們只討論網絡字節(jié)序(大端字節(jié)序)與小端字節(jié)序相互轉換的問題

首先我們要理解什么是大端模式,什么是小端模式?

大端模式:是指數(shù)據(jù)的高字節(jié)保存在內存的低地址中,而數(shù)據(jù)的低字節(jié)保存在內存的高地址

小端模式,是指數(shù)據(jù)的高字節(jié)保存在內存的高地址中,而數(shù)據(jù)的低字節(jié)保存在內存的低地址

具體的定義可以看這邊文章:大端、小端存儲模式概念

由于我的Mac電腦默認的是小端存儲模式,因此我需要進行大端的轉換,實現(xiàn)代碼如下,通過0xff進行位操作很簡單就實現(xiàn)了,代碼如下

- (NSData *)headDataFormat{
???
??? Byte byte[16];
???
??? byte[0] = (self.mPackageLength >> 24) & 0xff;
??? byte[1] = (self.mPackageLength >> 16) & 0xff;
??? byte[2] = (self.mPackageLength >> 8) & 0xff;
??? byte[3] = self.mPackageLength&0xff;
???
??? byte[4] = (self.mHeadLengh >> 8) & 0xff;
??? byte[5] = self.mHeadLengh & 0xff;
???
??? byte[6] = (self.mVersion >> 8) & 0xff;
??? byte[7] = self.mVersion & 0xff;
???
??? byte[8] = (self.mCommand >> 24) & 0xff;
??? byte[9] = (self.mCommand >> 16) & 0xff;
??? byte[10] = (self.mCommand >> 8) & 0xff;
??? byte[11] = self.mCommand & 0xff;
???
??? byte[12] = (self.mSessionId >> 24) & 0xff;
??? byte[13] = (self.mSessionId >> 16) & 0xff;
??? byte[14] = (self.mSessionId >> 8) & 0xff;
??? byte[15] = self.mSessionId & 0xff;

??? NSData *headData = [NSData dataWithBytes:byte length:sizeof(byte)];
??? OMSLogD(@"Head數(shù)據(jù):mPackageLength=%d,mHeadLengh=%d,mVersion=%d,mCommand=%d,mSessionId=%d",self.mPackageLength, self.mHeadLengh, self.mVersion, self.mCommand, self.mSessionId);
??? return headData;
}

通過byte數(shù)組,一個字節(jié)一個字節(jié)的轉換,這種方式對于剛剛接觸大端小端模式的我來說就比較好理解了;

同理,大端轉小端也可以使用這種方式,簡單易懂;

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 字符編碼方案的演變與字節(jié)序 一、字符編碼方案的演變 1. 前文已經提及,編號字符集CCS(簡稱字符集)與字符編碼方...
    笨笨阿林閱讀 1,412評論 1 3
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,623評論 30 472
  • 最全的iOS面試題及答案 iOS面試小貼士 ———————————————回答好下面的足夠了-----------...
    zweic閱讀 2,803評論 0 73
  • 包裝紙盒背后寫著, 請于10到15分鐘后取下, 三首, 聽不清的情詩。 花腳蚊子, 肩披武士戰(zhàn)盔在橘紅夜空下, 黑...
    修冰箱的小王閱讀 336評論 0 0
  • 真正的愛里,沒有恐懼,沒有犧牲,沒有掌控,沒有輸贏。 真正的愛里,只有敞開,只有信任,只有成全,只有自由。 在流淚...
    娜娜是我閱讀 253評論 0 0

友情鏈接更多精彩內容