簡體   English   中英

將十六進制字符串轉換為兩個不同的十進制數上下文。 在C.

[英]Converting a hex-string into two different context of decimal num. in C

我有一個字符串說:

char *hexstring = "08fc0021";

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

我的問題是將此字符串轉換為兩個不同的變量,例如:

int varA, varB;

varA的編號為2300,varB = 33。

通常我會使用sscanf將字符串轉換為十進制數。 但現在我有一個帶有兩個不同信息的串聯字符串的問題。

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

thx提前

按位和救援!

所以,做你需要什么可以用在32位導致數位與opperator做( int ?)你得到sscanf

您首先從字符串中獲取數字:

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.

你有它。

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;
}

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

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
varA = 0x8fc = 2300
varB = 0x21 = 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 = 0x21 = 33

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM