Как вывести INT в двоичном? - PullRequest
13 голосов
/ 17 июля 2010
int x = 5;
cout<<(char)x;

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

cout<<(int)x;

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

Ответы [ 5 ]

29 голосов
/ 14 марта 2016

Немного поздно, но, как показывает Кэти в своем блоге, это может быть элегантным решением:

#include <bitset>
#include <iostream>

int main(){
  int x=5;
  std::cout<<std::bitset<32>(x)<<std::endl;
}

взято из: https://katyscode.wordpress.com/2012/05/12/printing-numbers-in-binary-format-in-c/

9 голосов
/ 17 июля 2010

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

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

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

4 голосов
/ 17 июля 2010

Попробуйте:

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;
2 голосов
/ 17 июля 2010

а что по этому поводу? int x = 5; cout<<(char) ((0xff000000 & x) >> 24); cout<<(char) ((0x00ff0000 & x) >> 16); cout<<(char) ((0x0000ff00 & x) >> 8); cout<<(char) (0x000000ff & x);

1 голос
/ 17 июля 2010

Пара подсказок.

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

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

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

...