2011-08-06 45 views
1

uint64の数値を16進数形式の文字列に変換しようとしています。しかし、ゼロを含める必要があります。例:uint64を(フル)16進文字列に変換するC++

0x1 

をしかし、これは私が欲しいものではありません。

uint i = 1; 
std::ostringstream message; 
message << "0x" << std::hex << i << std::dec; 
... 

これが生成されます。私がしたい:

0x0000000000000001 

それともしかし、多くのゼロuint64ニーズを。

+0

Ramono:これは言語ではないVisual C++ではなく、C++です。 – ybungalobill

答えて

5

あなたはIOマニピュレータ使用することができます。また

#include <iomanip> 
#include <iostream> 

std::cout << std::setw(16) << std::setfill('0') << std::hex << x; 

を、あなたは、例えば、std::cout.setf(std::ios::hex)std::coutなどに個別に書式設定のフラグを変更することができますsee here ("Formatting")。フィールドの幅は、次回の出力操作にのみ影響し、デフォルトに戻すため、毎回設定する必要があることに注意してください。

プラットフォームに依存しない実際の16進数を得るには、sizeof(T) * CHAR_BIT/4 + (sizeof(T)*CHAR_BIT % 4 == 0 ? 0 : 1)のようなものをsetwの引数として使用できます。

2
message << "0x" << std::setfill('0') << std::setw(12) << std::hex << i << std::dec; 

そして、Boostを使用してストリームの状態を保存および復元します。

関連する問題