2013-02-28 39 views
-1

我有一個問題,並希望你們可以幫助我。我爲我的項目使用了32位uC。我通過鍵盤接收Uart上的字符到uC(通過超級終端)。因爲我只使用C,我將這些字符存儲到char類型的緩衝區中。例如,我需要發送一個十六進制的地址作爲輸入,如0xff502035。我用超級終端在Uart上發送了它,並將它存儲在我的緩衝區中。然後我想將其轉換爲整數(來自char),以便將其傳遞給我的函數,該函數將讀取存儲在該位置的值。字符數組到十六進制轉換

所以我需要的是這樣的:轉換成一個int的char []。所以如果我的緩衝區包含「0xff502035」,我需要它作爲0xff502035整數類型。提前謝謝你幫助我。

最好的問候, Laurentiu

+0

'atoi'是你的朋友 – SomeWittyUsername 2013-02-28 12:42:03

+0

@icepack - 不是如果輸入字符串是基於16 ... – slugonamission 2013-02-28 12:43:45

+0

@ icepack:我試着atoi,但如果只適用於「1234」...而不是「0Xff253447 「;( – Laurentiu 2013-02-28 14:10:27

回答

0

我不打算提供的全樣本,但有一個看看strtol功能「如何將字符串到數字轉換」。

+0

)你好,非常感謝提示我已經嘗試過了,但我面臨一個小問題..如果我輸入一個像」0xf5f500「這樣的字符串,它會正確轉換它,但是對於像」0xf5f500ff「這樣的字符串,如果給出完全錯誤的值?任何想法爲什麼??謝謝 – Laurentiu 2013-02-28 13:36:05

+0

@Laurentiu這將是因爲你將它分配給一個int。鑑於它是一個32位uC,正值的整數範圍是從0x00000000 - 0x7FFFFFFF,其中頂部bit用作「符號位」(或者相當於2mil左右的負數),查看兩個數字,看看爲什麼。你輸入的字符串在這個範圍之外,因此將是一個負數。答案是,使用更長的數據類型或將int標記爲無符號。 – slugonamission 2013-02-28 17:56:28

+0

感謝您的回答。問題是我試圖使它無符號整型或長數據類型,但輸出是相同的... 0x7FFFFFFF。我病了,但今天我會進一步調查這個問題... – Laurentiu 2013-03-04 08:54:19

0

已在此論壇上回復此問題,以上鍊接。

但是,完成後,儘管地址以十六進制格式記錄並以字符串形式傳輸,但實際上它是一個最終以二進制格式解釋的地址。函數strtoul可以在32位和64位系統上安全地使用,將十六進制格式的地址轉換回原始格式。

char * buf; //包含字符串格式的地址

char * endptr;

int * ptr;

ptr =(int *)strtoul(buf,& endptr,16);

+0

tr = strtoul(buf,&endptr,16); //校正 – 2013-02-28 12:56:59

+0

不要在自己的帖子中寫一條評論,指出「更正」。點擊「編輯」按鈕並修復它。 – Mike 2013-02-28 12:57:47

+0

另外,[strtoul()](http://linux.die.net/man/3/strtoul)返回一個無符號長整型,而不是'int *' – Mike 2013-02-28 12:59:41

相關問題