如何将字节数组(包含hex值)转换为十进制

我正在为Atmel微控制器编写一些代码。 我通过Uart获取一些数据,并将这些hex值存储到一个数组中。

假设数组的元素是:1F,29和3C。

我想有一个像0x1F293C这样的hex数,并将其转换为十进制数。 所以,我想最后得到“2042172”。

该数组可以有n个元素,所以我需要一个通用的解决方案。

谢谢。

如果您有一个像"0x1F293C"这样的字符数组并希望将其转换为int尝试以下代码:

 char receivedByte[] = "0x1F293C"; char *p; int intNumber = strtol(receivedByte, &p, 16); printf("The received number is: %ld.\n", intNumber); 
 sprintf(buffer, "%d", (((unsigned)array[0])<<16)+(((unsigned)array[1])<<8)+(unsigned)array[2]; 

这会将array的hex值写入buffer作为十进制表示中的可读字符串。

假设sizeof(int)=4

如果声明中的data声明为注释( char data[]={0x1F, 0x29, 0x3C} ),则可以运行此程序。

 #include  #include  int main() { char receivedByte[9], *p; char data[] = { 0x1F, 0x29, 0x3C }; sprintf(receivedByte, "0x%X%X%X", data[0], data[1], data[2]); int intNumber = strtol(receivedByte, &p, 16); printf("The received number is: %ld.\n", intNumber); return 0; } 

如果输入由n个字节组成并从指针array开始存储,则可以按照“接收”它们的顺序添加值 – 即按照它们在数组中写入的顺序。

 unsigned int convertToDecimal (unsigned char *array, int n) { unsigned int result = 0; while (n--) { result <<= 8; result += *array; array++; } return result; } 

请注意,您的示例输入包含3个字节,并且您需要“ n个字节的通用解决方案”,因此您可能会非常快地耗尽空间。 此function仅适用于0..4个字节。 如果需要更多字节,可以切换到long long (当前为8个字节)。

对于比您需要切换到BigNum库更长的序列。

 #include  int main(){ char data[] = {0x1F, 0x29, 0x3C}; int i, size = sizeof(data); unsigned value = 0; for(i=0;i