簡體   English   中英

C++ 從 int 轉換為字節數組,然后將該字節數組轉換回 int,導致溢出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM