我正在进行一个将字符串转换为无符号长整型的操作,使用的是在小端和大端机器上都可以使用的strtoul函数。小端机器返回了正确的值,而大端机器没有。这个函数在大端机器上真的不兼容吗?如果是这样的话,有没有解决方法?
代码:
printf ("%s\n",cLongs);
theLongs[i] = strtoul(cLongs, NULL, 10);
cout << "returned unsigned long value from string: " << theLongs[i] << endl;
小端结果:
1099188638048931
returned unsigned long value from string: 1099188638048931
大端字节序结果:
1099188638048931
returned unsigned long value from string: 4294967295
顺便说一句,对于大端示例,似乎总是返回相同的数字。
<<
运算符来获取更大的整数值,而不是使用C运行时。我相信C++应该已经为此做好了准备。我会尝试编写一个小例子给你看看。同时也会回答C++是否做好了准备 :) - 0xC0000022Lstrtoull
(在BSD上为strtouq
),它使用unsigned long long
,在两个系统上可能都是64位的。 - Tony Delroy