C++ C++;将int转换为字节数组,然后将该字节数组转换回int,导致溢出
我正在制作一个多人游戏,我使用CSocket在服务器和客户端之间发送数据,我需要传输原始字节。所以我测试了如何从整数到字节数组的转换和反转,这就是我测试的:C++ C++;将int转换为字节数组,然后将该字节数组转换回int,导致溢出,c++,arrays,integer,byte,overflow,C++,Arrays,Integer,Byte,Overflow,我正在制作一个多人游戏,我使用CSocket在服务器和客户端之间发送数据,我需要传输原始字节。所以我测试了如何从整数到字节数组的转换和反转,这就是我测试的: int test1 = 257; byte bytes[4]; copy(&test1, &test1 + 3, bytes); int test2; copy(bytes, bytes + 3, &test2); cout << "Test " << test2 <
int test1 = 257;
byte bytes[4];
copy(&test1, &test1 + 3, bytes);
int test2;
copy(bytes, bytes + 3, &test2);
cout << "Test " << test2 << endl;
inttest1=257;
字节[4];
复制(&test1,&test1+3,字节);
int test2;
复制(字节、字节+3和测试2);
cout所有指针运算都将以基本类型为单位进行
对于指向int
(int*
)的指针,添加3
将添加3*sizeof(int)
的字节偏移量
因此调用copy(&test1,&test1+3,bytes)
将3
int
值复制到四字节数组中
要仅复制一个int
,请改为添加1
:
copy(&test1, &test1 + 1, bytes);
将任何指针视为指向数组第一个元素的指针可能会有所帮助
对于&test1
而言,它可以被视为指向单个int
元素数组的第一个元素的指针
正如在评论中提到的(感谢john指出),您只需将bytes
数组中的三个字节复制到test2
end“iterator”应该是end后面的一个元素,它是指向字节[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;
inttest1=257;
字节[4];
复制((char*)和test1,(char*)和test1+4,字节);
int test2;
复制(字节,字节+4,(字符*)和测试2);
将字节复制回intI时是否会出现另一个+3
错误?我还想知道代码是否存在可能的结尾问题。复制到字节数组是作为单个int完成的,但复制回数组是作为字节完成的。@john如果在同一个系统上来回复制,则不应该有任何endianness问题。