我一直在嘗試以十六進制格式將uint64
號碼轉換爲字符串。但它應該包含零。例如:將uint64轉換爲(完整)十六進制字符串,C++
uint i = 1;
std::ostringstream message;
message << "0x" << std::hex << i << std::dec;
...
這將產生:
0x1
但這不是我想要的。我想要:
0x0000000000000001
或無論如何很多零uint64
需要。
我一直在嘗試以十六進制格式將uint64
號碼轉換爲字符串。但它應該包含零。例如:將uint64轉換爲(完整)十六進制字符串,C++
uint i = 1;
std::ostringstream message;
message << "0x" << std::hex << i << std::dec;
...
這將產生:
0x1
但這不是我想要的。我想要:
0x0000000000000001
或無論如何很多零uint64
需要。
您可以使用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
的參數。
message << "0x" << std::setfill('0') << std::setw(12) << std::hex << i << std::dec;
並使用Boost來保存和恢復流的狀態。
Ramono:這是C++,不可視-C++,其不是一種語言。 – ybungalobill