我想在char数组ex: 0中存储整数,直到1449,我检查了其他帖子,然后尝试了memset、sprinf等等,但是当我在char数组中打印时,我会得到一些乱七八糟的字符或不可读的符号。有人能帮忙吗?
我检查了重复链接,但我没有试图打印int到char,我想将int存储在char数组中。但我尝试了buf[i] = static_cast<char>(i);内部的循环,但它没有工作。演员没成功。
最后一个我试过的是这样的: char buf1450;
for (int i = 0; i < 1449; i++)
{
memset(buf, ' '+ i, 1450);
cout << buf[i];
}产出如下:

发布于 2019-09-26 06:54:23
我不知道你想做什么!你应该说出你的目标。
c++中的字符(通常为8位)不包含int (通常为32位),如果要存储int,则应使用int数组:
int buf[1500];memset(buf,‘'+ i,1450);实际上将在缓冲区的开头写入’ascii数+i‘之和(缓冲区地址从不增加)。
像这样,也许是你想要的:
int buf[1500] = 0;
for (int i = 0; i < 1449; i++)
{
buf[i] = i;
cout << buf[i] << ' ';
}考虑使用像std::c++11这样的容器来保存int或chars,使用起来会安全得多。
发布于 2019-09-26 06:54:37
您必须更好地解释您想要的是什么,因为“在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。
如果这不是您要寻找的行为(听起来似乎不是),那么您需要更详细地描述您的需求,否则我们将无法帮助您。
(*)字符代表必须能够包含。在许多/大多数系统上,它是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检查,以确保您的类型符合您的预期。
https://stackoverflow.com/questions/58110637
复制相似问题