web-dev-qa-db-ja.com

intをバイナリで出力する方法は?

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

上記のコードは、生のバイナリでint xを出力しますが、1バイトのみです。私のコードでは、xは0から2 ^ 32-1の間のどこかにある可能性があるため、xをバイナリで4バイトとして出力する必要があります。

cout<<(int)x;

トリックをしません、どうすればいいですか?

15
user299648

std::ostream::write()メンバー関数を使用できます。

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

通常、バイナリモードで開かれたストリームを使用してこれを実行する必要があることに注意してください。

9
James McNellis

少し遅れましたが、Katyがブログで示しているように、これはエレガントな解決策かもしれません。

#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/

29
Johann Horvat

試してみてください:

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
Martin York

そしてこれはどうですか?


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

いくつかのヒント。

まず、0から2 ^ 32-1の間にあるためには、nsigned 4バイト整数が必要です。

次に、x(&x)のアドレスで始まる4バイトには、必要なバイトがすでに含まれています。

それは役に立ちますか?

1
John