Как вывести int в двоичном формате?

int x = 5;
cout<<(char)x;

приведенный выше код выводит int x в исходном двоичном формате, но только 1 байт. то, что мне нужно, это выводить x как 4 байта в двоичном формате, потому что в моем коде x может находиться где угодно между 0 и 2 ^ 32-1, так как

cout<<(int)x;

не делает трюк, как бы я это сделал?

Ответ 1

Вы можете использовать функцию члена std::ostream::write():

std::cout.write(reinterpret_cast<const char*>(&x), sizeof x);

Обратите внимание, что вы обычно хотели бы сделать это с потоком, который был открыт в двоичном режиме.

Ответ 3

Try:

int x = 5;
std::cout.write(reinterpret_cast<const char*>(&x),sizeof(x));

Примечание. Эти данные в двоичном формате не переносятся.
Если вы хотите прочитать его на альтернативной машине, вам нужно либо иметь точно такую ​​же архитектуру, либо вам нужно стандартизировать формат и убедиться, что все машины используют стандартный формат.

Если вы хотите записать двоичный файл, самым простым способом стандартизации формата является преобразование данных в сетевой формат (имеется набор функций для этого htonl() ↔ ntohl() и т.д.)

int x = 5;
u_long  transport = htonl(x);
std::cout.write(reinterpret_cast<const char*>(&transport), sizeof(u_long));

Но самый переносимый формат - просто преобразовать в текст.

std::cout << x;

Ответ 4

а как насчет этого?


int x = 5;
cout<<(char) ((0xff000000 & x) >> 24);
cout<<(char) ((0x00ff0000 & x) >> 16);
cout<<(char) ((0x0000ff00 & x) >> 8);
cout<<(char) (0x000000ff & x);

Ответ 5

Несколько советов.

Сначала, чтобы быть между 0 и 2 ^ 32 - 1, вам понадобится четырехзначный четырехзначный номер.

Во-вторых, четыре байта, начинающиеся с адреса x (& x), уже имеют нужные байты.

Помогает ли это?