[英]How to extract a long unsigned int from a string literal using sscanf
我尝试将所有这些标志ld
li
和lu
与sscanf
一起使用,但没有一个起作用。 无论我在buf
多少,以下内容都会得到4294967295
:
long unsigned data;
char buf[40] = "data 2349872764943587";
if (sscanf (buf, "data %lu", &data) == 1)
{
printf ("%s\n", buf);
printf ("data:\t%lu\n", data);
}
输出:
data 2349872764943587
data: 4294967295
我使用了错误的转换标志还是错过了某些东西?
OP的unsigned long
2349872764943587
似乎是32位,因此不能表示51位2349872764943587
。
如果使用缺少64位整数的编译器卡住,则代码可以使用double
,它通常可以处理53位整数值而不会降低精度。
double data;
char buf[40] = "data 2349872764943587";
if (sscanf (buf, "data %lf", &data) == 1)
{
printf ("%s\n", buf);
printf ("data:\t%.0f\n", data);
}
产量
data: 2349872764943587
只能保证您的long unsigned
数据类型的大小为32位,因此它可以容纳的最大值为4294967295
。
请改用unsigned long long
。
在您的情况下,似乎unsigned long
占用4个字节,因此无法保存2349872764943587
,这需要多于32位存储。
您可以使用unsigned long long
(使用sizeof
检查大小,需要为8)或uint64_t
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.