2011-08-06 110 views
1

我一直在嘗試以十六進制格式將uint64號碼轉換爲字符串。但它應該包含零。例如:將uint64轉換爲(完整)十六進制字符串,C++

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

這將產生:

0x1 

但這不是我想要的。我想要:

0x0000000000000001 

或無論如何很多零uint64需要。

+0

Ramono:這是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")。請注意,每次都必須設置字段寬度,因爲它隻影響下一個輸出操作,然後恢復爲默認值。

要以獨立於平臺的方式獲取真正的十六進制數字,可以使用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來保存和恢復流的狀態。

相關問題