signed unsigned 引發的血案

2021-06-22 03:30:20 字數 504 閱讀 3359

bug描述:

問題產生於區域網傳輸一幅。

服務端負責傳送,是由另乙個同事用c#寫的,我用c++寫接收客戶端。

我們約定在傳輸一幅前,先傳固定4個位元組的size資訊,然後傳資料。

結果發現有些總是末尾壞掉一截或是乾脆就傳不過來。

bug原因:

在我接收到size[4]後,我採用了size = size[3]*256*256*256 + size[2]*256*256+size[1]*256+size[0]的方式來將字串轉換為整形。

但是size[4]是char型字串,於是在char型字元和整形相乘的過程中,char型被自動轉換成了signed int型,於是出現負數,導致size計算出錯。

在每個字元前加(unsigned char)轉換一下就正確了。

當然這裡還有另外一種得到size的方式, 強制轉換指標型別,然後直接取值:size = *((unsigned int *)size);

signed unsigned 的數值概念

1.signed 和 unsigned 是兩種型別,對儲存器中的內容作不同的數值上的解釋,可以理解為乙個解碼過程 signed,unsigned 控制儲存空間中最高位的使用,char,int等控制訪問的位元組數 如 signed char 0x81的數學上的值是 127 或者十六進製制表示為 7f,...

深入理解signed unsigned 關鍵字

深入理解signed unsigned 關鍵字 答 1.0 和 0 在記憶體裡面分別怎麼儲存 十進位制數 原碼 反碼 補碼 0 00000000 00000000 00000000 0 10000000 11111111 00000000 2.就以類似的例子來描述 unsigned int a 6 ...

Linux shell指令碼上引 單引 模式匹配

生成日期日誌,記錄前一天使用的命令 vim mylog.sh bin bash f record touch record sed n 1p student.txt awk record start cat record mydate date y m d sed n start p student...