我想將字符串轉換爲帶符號的int。以下是要求。我已將十六進制值作爲字符串存儲在緩衝區中。現在我想將該值轉換爲signed int。將字符串轉換爲帶符號的int
buf = "fb869e"
將其轉換爲signed int。所以o/p應該是-293218。但是當我試圖使用strtol轉換時,我得到了16483998.那麼,我該怎麼做?
我想將字符串轉換爲帶符號的int。以下是要求。我已將十六進制值作爲字符串存儲在緩衝區中。現在我想將該值轉換爲signed int。將字符串轉換爲帶符號的int
buf = "fb869e"
將其轉換爲signed int。所以o/p應該是-293218。但是當我試圖使用strtol轉換時,我得到了16483998.那麼,我該怎麼做?
0xfb869e == 0x00fb869e == 16483998
作爲一個有符號的整數,高位必須設置爲產生一個負數。由於給定數字的高位沒有設置,它必須是正數。
如果你想把這個數字當作一個24位的數字來處理,那麼你必須把第23位填充到其餘的高位。這裏有一個辦法做到這一點:
long n = strtol(...);
if (n > 0xffffff) n |= 0xff000000;
char buf =「fb869e」 - 我想轉換爲signed int。 o/p應該是-293218。我只是試圖將字符串轉換爲長整型。但我沒有得到負面價值。 – ulaganathan 2010-09-25 05:51:28
char buf =「fb869e」。我想將其轉換爲signed int。所以o/p應該是-293218。我只是嘗試使用strtol將字符串轉換爲long。但我沒有得到負面的價值。我的十六進制值如下。我需要o/p在signed int中。 「C程序設計」 80000e fcc15e 7ffffe 0b778e 80000e ee4dae 7ffffe 1b1e5e 80000e de2b9e 7ffffe 2b8c4e 80000e ce2e1e 7ffffe – ulaganathan 2010-09-25 05:58:58
@ulganathan:有在我的答案中的錯誤。改用'if(n> 0x7fffff)...'代替。 – 2010-09-25 06:38:47
strtol將轉換字符串長整型
的輸出是正確的,這將是16483998
如果您使用atoi,而它將字符串轉換爲整數,如果超出可表示值INT_MAX或INT_MIN的範圍,則返回正確的值。
爲什麼要0x00fb869e是負數?你應該提供你的電話號碼系統的基礎上,甚至被允許講,在一個格式的值是否爲另一種格式
char buf =「fb869e」。我想將其轉換爲signed int。所以o/p應該是-293218。我的十六進制值如下。我需要o/p在signed int中。 80000e fcc15e 7ffffe 0b778e 80000e ee4dae 7ffffe 1b1e5e 80000e de2b9e 7ffffe 2b8c4e 80000e ce2e1e 7ffffe – ulaganathan 2010-09-25 05:57:53
負的十六進制數0xfb869e
是不負。內置數字轉換函數不會將其轉換爲負值,因爲它的值是正值。
你在說的是,這是一個24位二進制補碼負數的無符號十六進制等價物,並且你需要這個數字。獲得該方法是將其轉換爲正數,然後用計算將其轉換爲24位二進制補碼相當於:
char *buf = "fb869e";
long n;
n = strtol(buf, NULL, 16);
if (n > 0x7fffffL)
n -= 0x1000000L;
非常感謝....這事搞砸了我要過去3小時...再次感謝您的幫助.... – ulaganathan 2010-09-25 07:02:04
也有人建議strtol()
。我只想提sscanf()
作爲替代,如:
int i;
char *buf = "fb869e";
if (sscanf(buf, "%x", &i) == 1)
...
感謝您的回覆...... – ulaganathan 2010-09-25 10:38:30
使用strtol
它轉換string
到long
整數。
哪種語言? – codaddict 2010-09-25 05:28:27
編程語言? – 2010-09-25 05:29:48
你從哪裏得到0xfb869e是-293218?斯托爾其實是對的。 – vanza 2010-09-25 05:34:26