Ответ 1
Вы можете использовать функцию члена std::ostream::write()
:
std::cout.write(reinterpret_cast<const char*>(&x), sizeof x);
Обратите внимание, что вы обычно хотели бы сделать это с потоком, который был открыт в двоичном режиме.
int x = 5;
cout<<(char)x;
приведенный выше код выводит int x в исходном двоичном формате, но только 1 байт. то, что мне нужно, это выводить x как 4 байта в двоичном формате, потому что в моем коде x может находиться где угодно между 0 и 2 ^ 32-1, так как
cout<<(int)x;
не делает трюк, как бы я это сделал?
Вы можете использовать функцию члена std::ostream::write()
:
std::cout.write(reinterpret_cast<const char*>(&x), sizeof x);
Обратите внимание, что вы обычно хотели бы сделать это с потоком, который был открыт в двоичном режиме.
Немного поздно, но, как показывает Кейти в своем блоге, это может быть изящное решение:
#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/
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;
а как насчет этого?
int x = 5;
cout<<(char) ((0xff000000 & x) >> 24);
cout<<(char) ((0x00ff0000 & x) >> 16);
cout<<(char) ((0x0000ff00 & x) >> 8);
cout<<(char) (0x000000ff & x);
Несколько советов.
Сначала, чтобы быть между 0 и 2 ^ 32 - 1, вам понадобится четырехзначный четырехзначный номер.
Во-вторых, четыре байта, начинающиеся с адреса x (& x), уже имеют нужные байты.
Помогает ли это?