gpt4 book ai didi

c++ - 在 C++ 中将 long long 转换为十六进制和二进制

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:46 26 4
gpt4 key购买 nike

我有这个代码:

char digits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
'C', 'D', 'E', 'F' };
string toFormatFromDecimal(long long t, Format format) {
int digitCount = ceil(log(t) / log((int) format));
string hex = "";
for (int i = 0; i < digitCount; i++) {
hex += digits[(int) (t%format)];
t = t/format;
}
return string(hex.rbegin(), hex.rend());
}
string toHexFromDecimal(long long t) {
return "0x" + toFormatFromDecimal(t, HEX);
}

string toBinFromDecimal(long long t) {
return toFormatFromDecimal(t, BIN);
}

这应该将 long long 转换为十六进制或二进制表示,这适用于所有正数,但不适用于负数。

有什么想法可以扩展我的代码来处理带符号的数字吗?谢谢弗洛里安

编辑:现在我有一个类似的相反问题(字符串 -> long long)here

最佳答案

要转换带符号的值,只需将您的输入转换为unsigned long long。除此之外:你不需要建立一个数字计数,一旦你处理一个未签名的整数类型,继续直到它是0。并确保你至少得到一位数字,即使原始值为 0,使用 do ... while 循环:

std::string results;
unsigned long long tmp = t;
do
{
results += digits[ tmp % format ];
tmp /= format;
} while ( tmp != 0 );
std::reverse( results.begin(), results.end() );
return results;

通常更好的解决方案是传递最小位数in 作为参数:

std::string
toString( unsigned long long value, int base, int minSize = 1 )
{
static char const digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
assert( base >= 2 && base <= 36 );
std::string results;
while ( value != 0 || results.size() < minSize ) {
results += digits[ value % base ];
value /= base;
}
std::reverse( results.begin(), results.end() );
return results;
}

如果需要,这允许固定格式。

关于c++ - 在 C++ 中将 long long 转换为十六进制和二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19004995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com