[英]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.