国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

相同的結(jié)構(gòu)體,服務(wù)端和客戶端字節(jié)長(zhǎng)度差8個(gè)字節(jié),咋回事呢?

0
分享至

代碼報(bào)了個(gè)錯(cuò):“byte array size is smaller than the size of the structur”,意思就是byte數(shù)組的大小小于結(jié)構(gòu)體的大小,這個(gè)錯(cuò)報(bào)出來的原因是我代碼中有個(gè)邏輯,需要將byte數(shù)組轉(zhuǎn)換成結(jié)構(gòu)體,但很顯然,我沒有轉(zhuǎn)換成功,這是咋回事呢?

這個(gè)錯(cuò)報(bào)得我莫名其妙的,找了一個(gè)小時(shí)左右都沒找到問題出在哪,但是最后發(fā)現(xiàn)問題的時(shí)候,我甚至有些無語。在說清楚問題到底出在哪之前,我們得先了解下代碼的業(yè)務(wù)邏輯,然后您就知道為什么開始我覺得莫名其妙了!

代碼的業(yè)務(wù)邏輯是這樣的,我們的業(yè)務(wù)中有一個(gè)服務(wù)端和很多個(gè)客戶端,客戶端會(huì)定期給服務(wù)端發(fā)送消息,消息是以結(jié)構(gòu)體的形式發(fā)送的,當(dāng)然,在發(fā)送消息的時(shí)候,需要將結(jié)構(gòu)體轉(zhuǎn)換成byte數(shù)組。

為了確保發(fā)送消息的一致性,我特地封裝了一個(gè)專門用來處理消息的函數(shù)庫(kù),這樣就能確保每個(gè)客戶端在發(fā)送和接收消息的時(shí)候不會(huì)出現(xiàn)任何差錯(cuò)。

但是,差錯(cuò)偏偏就出現(xiàn)了!在某個(gè)客戶端上就出現(xiàn)了文章開頭的那個(gè)錯(cuò)!

經(jīng)過調(diào)試,我發(fā)現(xiàn)所有客戶端發(fā)送的消息內(nèi)容都是一樣的,并沒有任何區(qū)別。

結(jié)構(gòu)體屬于基本數(shù)據(jù)類型,因此在定義的時(shí)候,長(zhǎng)度就已經(jīng)確定了,我在服務(wù)端進(jìn)行調(diào)試,發(fā)現(xiàn)結(jié)構(gòu)體的長(zhǎng)度為288,但是,服務(wù)端接收到的byte數(shù)組長(zhǎng)度卻只有280,如此一來,在將byte轉(zhuǎn)換成結(jié)構(gòu)體的時(shí)候,因?yàn)殚L(zhǎng)度不一致,導(dǎo)致了轉(zhuǎn)換失敗。

前面說了,我專門封裝了一個(gè)消息處理的庫(kù),服務(wù)端和客戶端使用的是庫(kù)里面同一個(gè)結(jié)構(gòu)體,不可能會(huì)出現(xiàn)兩邊長(zhǎng)度不一致的情況。

事出反常必有妖!

服務(wù)端是同一個(gè)服務(wù)端,因此問題只可能出現(xiàn)在客戶端的代碼上!因?yàn)槲覀兊目蛻舳擞胁煌姹?,每個(gè)版本有單獨(dú)的代碼,而代碼只有略微差別。

我拿了不同版本的客戶端代碼進(jìn)行調(diào)試,詭異的是,出問題的那個(gè)客戶端在發(fā)送消息時(shí),結(jié)構(gòu)體的長(zhǎng)度偏偏就是280,而其他客戶端在發(fā)送消息時(shí),結(jié)構(gòu)體長(zhǎng)度卻是288!

一個(gè)小時(shí)都過去了,我硬是沒找出問題所在,于是,我只能使用笨辦法,那就是作對(duì)比,看看出問題的客戶端代碼和沒出問題的客戶端代碼有什么不同。

這么一對(duì)比,就讓我找到了差異點(diǎn),原來,出問題的客戶端代碼在編譯的時(shí)候勾選了“首選32位”,我一拍腦袋:“原來是這樣!”

這個(gè)結(jié)構(gòu)體的內(nèi)容很簡(jiǎn)單,里面是由一個(gè)Int64字段+兩個(gè)Int32字段+一個(gè)指針+一個(gè)指定了長(zhǎng)度的字符串字段組成,其中,字符串的長(zhǎng)度被指定為255。

公司代碼是用C#編寫的,在C#中,正常情況下,Int64所占字節(jié)數(shù)為8位,Int32所占字節(jié)數(shù)為4位,指針?biāo)甲止?jié)數(shù)為8位。

而指針類型在32位環(huán)境和64位環(huán)境里面所占用的字節(jié)是不一樣的,在32位環(huán)境里占4個(gè)字節(jié),而在64位環(huán)境里則占8個(gè)字節(jié)!

結(jié)語

因此,最終真相大白!于是我去除勾選“首選32位”,再次編譯,發(fā)現(xiàn)結(jié)構(gòu)體的長(zhǎng)度變成了288!

說到這里,肯定有人關(guān)心為什么項(xiàng)目被勾選了“首選32位”,因?yàn)槲乙恢睕]有將代碼上傳代碼庫(kù),所以具體是怎么發(fā)生的,其實(shí)我也不知道,也許是IDE默認(rèn)就給勾上了,但是因?yàn)橐恢睕]測(cè)到這,所以問題一直沒被發(fā)現(xiàn)。

聲明:個(gè)人原創(chuàng),僅供參考

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
美國(guó)軍力全球第一,敢打任何國(guó)家?俄潑冷水:這4國(guó)你敢打誰?

美國(guó)軍力全球第一,敢打任何國(guó)家?俄潑冷水:這4國(guó)你敢打誰?

近史談
2026-01-19 10:09:51
后續(xù)!絕情臭豆腐最新進(jìn)展:負(fù)責(zé)人正臉曝光社死,店老板公開道歉

后續(xù)!絕情臭豆腐最新進(jìn)展:負(fù)責(zé)人正臉曝光社死,店老板公開道歉

離離言幾許
2026-02-28 18:08:15
絕情臭豆腐事件大結(jié)局:店老板發(fā)聲,雙方已和解,賠償金額已到賬

絕情臭豆腐事件大結(jié)局:店老板發(fā)聲,雙方已和解,賠償金額已到賬

潮鹿逐夢(mèng)
2026-02-28 21:25:16
首日戰(zhàn)況:美以三板斧襲擊伊朗斬首戰(zhàn)果顯著,哈梅內(nèi)伊及親屬遇難

首日戰(zhàn)況:美以三板斧襲擊伊朗斬首戰(zhàn)果顯著,哈梅內(nèi)伊及親屬遇難

裝甲鏟史官
2026-03-01 10:32:21
媒體發(fā)布衛(wèi)星圖 顯示哈梅內(nèi)伊住所遭襲的前后對(duì)比景象

媒體發(fā)布衛(wèi)星圖 顯示哈梅內(nèi)伊住所遭襲的前后對(duì)比景象

財(cái)聯(lián)社
2026-03-01 13:07:07
伊朗一小學(xué)遭導(dǎo)彈襲擊,已致118人死亡

伊朗一小學(xué)遭導(dǎo)彈襲擊,已致118人死亡

界面新聞
2026-03-01 07:29:30
賭中國(guó)不會(huì)還手?巴拿馬總統(tǒng)被秒打臉,中方第五波反制馬上就到

賭中國(guó)不會(huì)還手?巴拿馬總統(tǒng)被秒打臉,中方第五波反制馬上就到

石江月
2026-02-28 17:09:34
伊朗最高領(lǐng)袖哈梅內(nèi)伊遇襲身亡,特朗普警告轟炸行動(dòng)暫不會(huì)停!

伊朗最高領(lǐng)袖哈梅內(nèi)伊遇襲身亡,特朗普警告轟炸行動(dòng)暫不會(huì)停!

財(cái)聯(lián)社
2026-03-01 10:14:07
被美以轟炸后,伊朗民眾為何不慌?甚至在跳舞歡呼慶祝

被美以轟炸后,伊朗民眾為何不慌?甚至在跳舞歡呼慶祝

老馬拉車莫少裝
2026-02-28 22:43:52
回顧:孫子長(zhǎng)相神似爺爺,婆婆懷疑兒媳12年,親子鑒定后全家愣住

回顧:孫子長(zhǎng)相神似爺爺,婆婆懷疑兒媳12年,親子鑒定后全家愣住

談史論天地
2026-02-28 14:55:57
特朗普應(yīng)該想不到:他對(duì)伊朗的滅國(guó)之戰(zhàn),讓中俄歐看清了一個(gè)真相

特朗普應(yīng)該想不到:他對(duì)伊朗的滅國(guó)之戰(zhàn),讓中俄歐看清了一個(gè)真相

頭條爆料007
2026-02-28 18:49:20
哈梅內(nèi)伊身亡,布達(dá)諾夫:俄羅斯會(huì)接受美國(guó)為烏克蘭提供的安全保證 | 狼叔看世界

哈梅內(nèi)伊身亡,布達(dá)諾夫:俄羅斯會(huì)接受美國(guó)為烏克蘭提供的安全保證 | 狼叔看世界

狼叔看世界
2026-03-01 11:40:52
哈梅內(nèi)伊身亡,115名孩童葬身空襲!戰(zhàn)爭(zhēng)之下,醫(yī)務(wù)人員的堅(jiān)守有多痛?

哈梅內(nèi)伊身亡,115名孩童葬身空襲!戰(zhàn)爭(zhēng)之下,醫(yī)務(wù)人員的堅(jiān)守有多痛?

醫(yī)脈圈
2026-03-01 11:10:40
美以對(duì)伊朗斬首轟炸得逞 “反常規(guī)”白天空襲是成功關(guān)鍵

美以對(duì)伊朗斬首轟炸得逞 “反常規(guī)”白天空襲是成功關(guān)鍵

洪超飛軍事
2026-03-01 11:47:26
“反詐老陳”賬號(hào)被封,本人回應(yīng):?jiǎn)栃臒o愧!MCN機(jī)構(gòu):即刻解除所有合約,雙方合作立即終止

“反詐老陳”賬號(hào)被封,本人回應(yīng):?jiǎn)栃臒o愧!MCN機(jī)構(gòu):即刻解除所有合約,雙方合作立即終止

都市快報(bào)橙柿互動(dòng)
2026-03-01 07:15:47
怎么也想不通,她長(zhǎng)這么漂亮,演技那么好,為啥一直火不起來呢

怎么也想不通,她長(zhǎng)這么漂亮,演技那么好,為啥一直火不起來呢

草莓解說體育
2026-03-01 00:47:24
哈梅內(nèi)伊死了,美伊戰(zhàn)爭(zhēng)烈度比想象的要大很多

哈梅內(nèi)伊死了,美伊戰(zhàn)爭(zhēng)烈度比想象的要大很多

黑噪音
2026-03-01 09:49:45
真香??!個(gè)稅退稅退回21606.18元,浙江一網(wǎng)友曬出自己的“經(jīng)驗(yàn)”

真香??!個(gè)稅退稅退回21606.18元,浙江一網(wǎng)友曬出自己的“經(jīng)驗(yàn)”

火山詩(shī)話
2026-03-01 10:32:25
突然大跌,15萬人爆倉(cāng)!伊朗發(fā)射高超音速導(dǎo)彈,并封鎖霍爾木茲海峽,油價(jià)或飆升,國(guó)內(nèi)金飾克價(jià)突破1600元

突然大跌,15萬人爆倉(cāng)!伊朗發(fā)射高超音速導(dǎo)彈,并封鎖霍爾木茲海峽,油價(jià)或飆升,國(guó)內(nèi)金飾克價(jià)突破1600元

每日經(jīng)濟(jì)新聞
2026-03-01 01:03:36
28分鐘22+9+7提前打卡!41歲詹皇又創(chuàng)三紀(jì)錄 美記諷刷數(shù)據(jù)遭打臉

28分鐘22+9+7提前打卡!41歲詹皇又創(chuàng)三紀(jì)錄 美記諷刷數(shù)據(jù)遭打臉

顏小白的籃球夢(mèng)
2026-03-01 11:48:51
2026-03-01 13:19:00
程序員古耕 incentive-icons
程序員古耕
程序員、網(wǎng)文作家、自媒體人
599文章數(shù) 389關(guān)注度
往期回顧 全部

科技要聞

小米超跑概念車全球首秀!殺入頂豪俱樂部

頭條要聞

伊方:目前用的只是"廢舊導(dǎo)彈" 將展示不可預(yù)見的武器

頭條要聞

伊方:目前用的只是"廢舊導(dǎo)彈" 將展示不可預(yù)見的武器

體育要聞

火箭輸給熱火:烏度卡又輸斯波教練

娛樂要聞

《江山為聘》:吳謹(jǐn)言陳哲遠(yuǎn)燃炸朝堂

財(cái)經(jīng)要聞

中東局勢(shì)升級(jí) 如何影響A股、黃金和原油

汽車要聞

小米汽車2月交付超20000臺(tái) 雷軍:為新SU7量產(chǎn)作準(zhǔn)備

態(tài)度原創(chuàng)

健康
教育
親子
時(shí)尚
本地

轉(zhuǎn)頭就暈的耳石癥,能開車上班嗎?

教育要聞

基本盤

親子要聞

驚!48歲再婚女孕7個(gè)月才知,順產(chǎn)揭秘引關(guān)注!

普通人穿衣不需要太復(fù)雜!顏色恰當(dāng)、搭配和諧,高級(jí)又耐看

本地新聞

津南好·四時(shí)總相宜

無障礙瀏覽 進(jìn)入關(guān)懷版