【发布时间】:2019-09-20 07:34:08
【问题描述】:
我有一个函数应该以十六进制格式的 unsigned long long 作为参数。我正在尝试将此参数转换为字符串以检查它是否由 16 位数字组成,但我遇到了前导零问题
template <typename T>
static string to_string(const T& value) {
stringstream oss;
oss << hex << setprecision(16) << value;
return oss.str();
}
int main(int argc, char** argv) {
unsigned long long pattern1 = 0x0000001000000002;
unsigned long long pattern2 = 0x0FFFFFFFFFFFFFFFF;
cout << "Pattern 1 = " << to_string(pattern1) << endl;
cout << "Pattern 2 = " << to_string(pattern2) << endl;
return 0;
}
我想要的是用零转换模式 1 以便能够检查它的长度,但这是输出。我尝试使用设置的精度,但似乎没有帮助
Pattern 1 = 1000000002
Pattern 2 = ffffffffffffffff
【问题讨论】:
-
不可能。内存中前导零的数量由类型的大小决定。
-
我不明白你在问什么。您要在字符串中添加多少个前导零?
-
@melpomene 我不想加零,我只想检查十六进制格式的
unsigned long long的长度 -
Any
unsigned long long在您使用的编译器中将有 16 个十六进制数字。你不需要检查它的长度。如果这是参数的签名,编译器将确保您的方法接收到unsigned long long。不清楚你在问什么。 -
小数位数没有前导零由
log10(value)+1给出。无需字符串转换。但这不是你要求的。