您将不得不更好地解释您想要什么,因为“将整数存储在 char 数组中”正是这段代码的作用:
char buf[1450];
for (int i = 0; i < 1450; i++)
{
buf[i] = static_cast<char>(i);
std::cout << buf[i];
}
是的,输出与您的图片显示的相似,但这也是正确的输出。
当您使用调试器查看buf循环后,它确实包含:0, 1, 2, 3, ..., 126, 127, -128, -127, ..., 0, 1, 2, 3, ...等等,这是预期的内容,因为我们试图将数字 0-1449 放入整数类型(在这种情况下*)可以包含范围 [-128;127]。
如果这不是您正在寻找的行为(听起来好像不是),那么您需要更详细地描述您的要求,否则我们将无法为您提供帮助。
(*) Char 必须能够包含字符代表。在许多/大多数系统上,它是 8 位,但大小取决于系统,也可能更大。
新答案。
感谢您的澄清,我相信您需要的是这样的:
int32_t before = 1093821061; // Int you want to transmit
uint8_t buf[4];
buf[0] = static_cast<uint8_t>((before >> 0) & 0xff);
buf[1] = static_cast<uint8_t>((before >> 8) & 0xff);
buf[2] = static_cast<uint8_t>((before >> 16) & 0xff);
buf[3] = static_cast<uint8_t>((before >> 24) & 0xff);
// Add buf to your UDP packet and send it
// Stuff...
// After receiving the packet on the other end:
int32_t after = 0;
after += buf[0] << 0;
after += buf[1] << 8;
after += buf[2] << 16;
after += buf[3] << 24;
std::cout << before << ", " << after << std::endl;
您的问题(如我所见)是您想在 UDP 数据包所需的 8 位缓冲区中存储 32 位数字。这样做的方法是将较大的数字分开,并将其转换为单独的字节,传输这些字节,然后从字节中再次组装大数字。
上面的代码应该允许你这样做。请注意,我已将类型更改为int32_t并uint8_t确保我知道我的类型的确切大小 - 根据您使用的库,您可能必须使用普通int和char类型,请注意,您的类型的确切大小不能保证(很可能它仍然是 32 位和 8 位,但如果您更改编译器或针对不同的目标系统进行编译,它们的大小可能会发生变化)。如果您愿意,您可以添加一些sizeof检查以确保您的类型符合您的期望。