2015-11-04 18 views
1

我有一個字符串說:將十六進制字符串轉換爲兩個不同的十進制數字的上下文。用C

char *hexstring = "08fc0021"; 

這兩個信息的級聯每兩個字節長。 該字符串的前兩個字節,即:08fc對應於dec中的2300。 。 最後4個字節,即0021 - > 33

我的問題是這個字符串轉換成兩個不同的變量,說:

int varA, varB; 

這裏翻會有數2300和varB = 33.

通常我會用sscanf將字符串轉換爲十進制數字。 但現在我有兩個不同的信息連接字符串的這個問題。

任何想法建議如何釘這個?

THX提前

+2

想想它:如何將字符串分成兩個字符串?谷歌如果不可行,就自己去做。 – Downvoter

+1

'sscanf',它會給你32位的數字0x08fc0021。現在你可以把這個數字分成兩個數字0x08fc和0x0021。這非常非常基本的操作留給讀者。 –

+0

thx you two,for a fast answer。例如,可以做一個簡單的「二進制」操作(向左/右移位4位,以此類推),以獲得想要的信息。 我後來的是如果有一個功能可以完成這項工作的構建。例如,通過你定義一個起始內存地址......例如,ala sscanf ..在那裏你給出了字符串的開始和結束地址 – KapaA

回答

1

位與來救援!

因此,您可以使用從sscanf得到的結果32位數字(int?)上的按位AND操作符完成您所需要的操作。

你第一次從字符串獲得數:

char* hexstring = "0x08fc0021"; 
int num = 0; 
sscanf(hexstring, "%x", &num); //put the number into num. 

然後你得到你想要使用&位:

int varA=0, varB=0; 
varA = num & 0xFFFF; //will get the second half. 
varB = num & 0xFFFF0000; 
varB = varB >> 16; // now you have the first half as well. 

有你有它。

1
int main(int argc, char *argv[]) { 

    char *hexstring = "08fc0021"; 
    unsigned long hexnumber = 0u; 
    unsigned short a = 0u; 
    unsigned short b = 0u; 

    /* Use sscanf() to convert the string to integer */ 
    sscanf(hexstring, "%x", &hexnumber); 

    /* Use bitwise and to filter out the two higher bytes * 
    * and shift it 16 bits right       */ 
    a = ((hexnumber & 0xFFFF0000u) >> 16u); 

    /* Use bitwise AND to filter out the two lower bytes */ 
    b = (hexnumber & 0x0000FFFFu); 

    printf("0x%X 0x%X\n",a,b); 

    return 0; 
} 
1

您可以使用此方法(位操作):

char *hexstring = "08fc0021"; 

int aux; 
sscanf(hexstring, "%x", &aux); 
printf("aux = 0x%x = %d\n", aux, aux); 

int varA = (aux & 0xFFFF0000) >> 16, varB = aux & 0x0000FFFF; 
printf("varA = 0x%x = %d\n", varA, varA); 
printf("varB = 0x%x = %d\n", varB, varB); 

結果:

AUX = 0x8fc0021 = 150732833
翻= 0x8fc = 2300
varB = 0×21 = 33

編輯:
或者這種方法(字符串操作):

// requires a hexstring length of 8 or more sophisticated logic 
char *hexstring = "08fc0021"; 
int len = strlen(hexstring); 

char varA[5], varB[5]; 
for(int i = 0; i<len; i++) 
{ 
    if(i < 4) varA[i] = hexstring[i]; 
    else varB[i-4] = hexstring[i]; 
} 

varA[4] = varB[4] = '\0'; 

int varAi, varBi; 
sscanf(varA, "%x", &varAi); 
sscanf(varB, "%x", &varBi); 

printf("varAi = 0x%x = %d\n", varAi, varAi); 
printf("varBi = 0x%x = %d\n", varBi, varBi); 

相同的結果:

varAi = 0x8fc = 2300
varBi = 0×21 = 33

相關問題