gpt4 book ai didi

c++ - 在 Linux 32 位上带有基数 36 的 strtoull 溢出 unsigned long long

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:44 24 4
gpt4 key购买 nike

有人知道为什么使用 strtoull 会溢出 unsigned long long 吗?调用时“x”的值为 12,因此我试图将 12 位基数 36 num 转换为 unsigned long long。

这应该行得通吧?我编译 32 位还是 64 位并不重要。我在 redhat 上使用 g++。

缓冲区是一个字符*

char *strPtr = buffer + ORDERIDOFFSET;
char *endPtr = strPtr + ORDERIDLENGTH;
long x = long((endPtr)) - long(buffer + ORDERIDOFFSET);
unsigned long long orderid = strtoull((buffer + ORDERIDOFFSET), &(endPtr), 36);

谢谢!

最佳答案

你似乎误以为endptrstrtoull的输入参数,告诉它输入的字符串有多长。它不是。它是一个输出参数,strtoull 使用它来告诉您它无法转换的第一个字符。

我假设您的缓冲区不是以 null 结尾的;您的 12 位 base-36 数字后面可能有一个字母数字字符。

顺便说一句,恕我直言,x 最好计算为 endPtr - strPtr。转换为 long 并不正确。

关于c++ - 在 Linux 32 位上带有基数 36 的 strtoull 溢出 unsigned long long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19713684/

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