Вам нужно будет лучше объяснить, что именно вы хотите, потому что "хранить целые числа в массиве символов" - это именно то, что делает этот код:
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;
Ваша проблема (на мой взгляд) состоит в том, что вы хотите хранить 32-битные числа в 8-битных буферах, которые вам нужны для пакетов UDP.Для этого нужно выделить большее число, преобразовать его в отдельные байты, передать эти байты, а затем снова собрать большое число из байтов.
Приведенный выше код должен позволить вам сделать это,Обратите внимание, что я изменил типы на int32_t
и uint8_t
, чтобы убедиться, что я знаю точный размер моих типов - в зависимости от используемой вами библиотеки, вам, возможно, придется использовать простые типы int
и char
, простопомните, что тогда точные размеры ваших типов не гарантируются (скорее всего, они все равно будут 32 и 8 бит, но они могут изменить размер, если вы измените компилятор или скомпилируете для другой целевой системы).Если вы хотите, вы можете добавить sizeof
проверок, чтобы ваши типы соответствовали вашим ожиданиям.