将 HEXA 64 位数字转换为 int
Converting HEXA 64 bits numbers to int
我正在做一份大学作业,在字符串流中包含的六进制数字之间进行转换。我有一个很大的六进制数(一个私钥),我需要转换为 int,放入一个 map。
所以当我 运行 代码时,插入的所有两个六进制值的转换结果都是相同的,不正确的是,转换后的结果应该是不同的。我认为这是一个 int 大小的堆栈问题,因为当我插入短六边形时,它的效果很好。如下所示,hexa 有 64 位。
有什么想法让它发挥作用吗?
int main()
{
unsigned int x;
std::stringstream ss;
ss << std::hex << "0x3B29786B4F7E78255E9F965456A6D989A4EC37BC4477A934C52F39ECFD574444";
ss >> x;
std::cout << "Saida" << x << std::endl;
// output it as a signed type
std::cout << "Result 1: " << static_cast<std::int64_t>(x) << std::endl;
ss << std::hex << "0x3C29786A4F7E78255E9A965456A6D989A4EC37BC4477A934C52F39ECFD573344";
ss >> x;
std::cout << "Saida 2 " << x << std::endl;
// output it as a signed type
std::cout << "Result 2: " << static_cast<std::int64_t>(x) << std::endl;
}
每个十六进制数字等于 4 位 (0xf -> 1111b)。这些十六进制字符串都是 64 x 4 = 256 位长。您正在查看范围错误。
- 首先,您示例中的 HEX 数字不适合 unsigned int。
- 你应该在加载第二个十六进制数之前清除流。
...
std::cout << "Result 1: " << static_cast<std::int64_t>(x) << std::endl;
ss.clear();
ss << std::hex << "0x3C29786A4F7E78255E9A965456A6D989A4EC37BC4477A934C52F39ECFD573344";
ss >> x;
...
您需要一次处理输入的16个字符。每个字符为 4 位。前 16 个字符将为您提供一个无符号的 64 位值。 (16x4 是 64)
然后你可以将第一个值放在向量或其他容器中,然后继续接下来的 16 个字符。如果您对字符串操作有疑问,请搜索此站点以查找类似问题。
我正在做一份大学作业,在字符串流中包含的六进制数字之间进行转换。我有一个很大的六进制数(一个私钥),我需要转换为 int,放入一个 map
有什么想法让它发挥作用吗?
int main()
{
unsigned int x;
std::stringstream ss;
ss << std::hex << "0x3B29786B4F7E78255E9F965456A6D989A4EC37BC4477A934C52F39ECFD574444";
ss >> x;
std::cout << "Saida" << x << std::endl;
// output it as a signed type
std::cout << "Result 1: " << static_cast<std::int64_t>(x) << std::endl;
ss << std::hex << "0x3C29786A4F7E78255E9A965456A6D989A4EC37BC4477A934C52F39ECFD573344";
ss >> x;
std::cout << "Saida 2 " << x << std::endl;
// output it as a signed type
std::cout << "Result 2: " << static_cast<std::int64_t>(x) << std::endl;
}
每个十六进制数字等于 4 位 (0xf -> 1111b)。这些十六进制字符串都是 64 x 4 = 256 位长。您正在查看范围错误。
- 首先,您示例中的 HEX 数字不适合 unsigned int。
- 你应该在加载第二个十六进制数之前清除流。
...
std::cout << "Result 1: " << static_cast<std::int64_t>(x) << std::endl;
ss.clear();
ss << std::hex << "0x3C29786A4F7E78255E9A965456A6D989A4EC37BC4477A934C52F39ECFD573344";
ss >> x;
...
您需要一次处理输入的16个字符。每个字符为 4 位。前 16 个字符将为您提供一个无符号的 64 位值。 (16x4 是 64)
然后你可以将第一个值放在向量或其他容器中,然后继续接下来的 16 个字符。如果您对字符串操作有疑问,请搜索此站点以查找类似问题。