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...