您可以使用此方法(位操作):
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
想想它:如何将字符串分成两个字符串?谷歌如果不可行,就自己去做。 – Downvoter
'sscanf',它会给你32位的数字0x08fc0021。现在你可以把这个数字分成两个数字0x08fc和0x0021。这非常非常基本的操作留给读者。 –
thx you two,for a fast answer。例如,可以做一个简单的“二进制”操作(向左/右移位4位,以此类推),以获得想要的信息。 我后来的是如果有一个功能可以完成这项工作的构建。例如,通过你定义一个起始内存地址......例如,ala sscanf ..在那里你给出了字符串的开始和结束地址 – KapaA