[英]C++ convert from int to byte array, then convert that byte array back to int, cause overflow
我正在制作一個多人游戲,我使用 CSocket 在服務器和客戶端之間發送數據,我需要傳輸原始字節。 所以我測試了如何從 integer 轉換為字節數組並反轉,這就是我測試的:
int test1 = 257;
byte bytes[4];
copy(&test1, &test1 + 3, bytes);
int test2;
copy(bytes, bytes + 3, &test2);
cout << "Test " << test2 << endl;
打印出來的 test2 變量,值不是 257 而是 1,我認為這是因為類型 byte(無符號字符)的大小為 256 並且它正在經歷溢出。 無論如何我可以正確轉換嗎?
所有指針運算都將以基本類型為單位完成。
對於指向int
( int*
) 的指針,添加3
將添加3 * sizeof(int)
的字節偏移量。
所以調用copy(&test1, &test1 + 3, bytes)
會將3
int
值復制到四字節數組中。
要僅復制一個int
,然后添加1
:
copy(&test1, &test1 + 1, bytes);
將任何指針視為指向數組第一個元素的指針可能會有所幫助。
對於&test1
,它可以被視為指向單個int
元素的數組的第一個元素的指針。
正如評論中提到的(感謝約翰指出),您只需將bytes
數組中的三個字節復制到test2
中。
結尾的“迭代器”應該是結尾之后的一個元素,它是指向bytes[4]
的指針。 那就是你需要
copy(bytes, bytes + 4, &test2);
這是您修復的代碼
int test1 = 257;
byte bytes[4];
copy((char*)&test1, (char*)&test1 + 4, bytes);
int test2;
copy(bytes, bytes + 4, (char*)&test2);
cout << "Test " << test2 << endl;
我將所有指針轉換為 char 指針,我使用 +4 而不是 +3。 +3 僅復制三個字節,因此無法復制最后一個字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.