2017-02-16 65 views
0

我會把用戶的十六進制輸入到buffer陣列,但我不接受它,scanf不合適。像這樣輸入數據(0x 06 41 42 43 0f 52 53)。此外,我想將字符串轉換爲整型數組的一部分。我用atoi,最好的辦法是什麼?我怎麼把十六進制輸入數組從用戶c

#include <stdio.h> 

int main(){ 

    char buffer[1000]; 
    char dest[3]; 
    int x; 

    //scanf("%s",buffer); 
    x=atoi(strncpy(dest,buffer+1,4)) 
} 
+1

你可以將其保存爲一個字符串,然後解析它。並將其轉換爲十進制。 –

+0

'(00 06 41 42 43 0f 52 53)'是八進制數(不是十六進制) –

+1

@KeineLust八進制數不包括f。 –

回答

0

下面的簡單函數的字符串轉換與十六進制數爲整數:

int atox(const char *s) 
{ 
    int x= 0; 
    while (*s) { 
     x= x*16+(*s>'9'?(toupper(*s)-'A'+10):*s-'0'); 
     s++; 
    } 
    return x; 
} 

,並調用它像:

printf("%02x\n",atox("42")); 
printf("%02x\n",atox("a1")); 
printf("%02x\n",atox("A1")); 

注意,字符串必須完全串轉換,所以沒有空格或其他。

+0

謝謝,我明白你的功能,但它給分段錯誤(核心傾倒)爲什麼? –

+0

查看更新:可能您用不正確的字符串調用。 –

0

下面是使用strtol功能考慮字符串內數字作爲十六進制的代碼(base8他們將八進制):

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    char *s="00 06 41 42 43 0f 52 53"; 
    char *endpoint=s; 
    int base=16,count=1; 
    long int result=0; 

    do 
    { 
     result=strtol(endpoint,&endpoint,base); 
     printf("value %d %ld\n",count,result); 
     count++; 
    }while((endpoint - s) < (size_t)strlen(s)); 
    return 0; 
} 
相關問題