从字符数组将十六进制转换为十进制
Convert Hex to Decimal from char array
我有一个包含一些十六进制值的 CHAR 缓冲区
首先,我想连接数组的每 2 个连续元素,然后将其转换为 Decimal 例如我有 recvbuf[i] = d 和 recvbuf[i+1 ] = 60 >>> recvbuf[i] = d60(十六进制值)>>> recvbuf[i] =3424 (十进制)
我是从这个开始的:
recvbuf[i]=recvbuf[i]&recvbuf[i+1];
你能帮忙把recvbuf[i]转换成十进制值吗
虽然你的问题缺乏一些信息,但我尽量提供我所理解的答案。
#include <stdio.h>
#include <stdint.h>
#define NUM_VALUES 5
int main(void)
{
uint8_t input_data[NUM_VALUES * 2] = {1, 2, 0x0d, 0x60, 5, 6, 7, 8, 9, 10};
uint16_t result_data[NUM_VALUES];
for (int i = 0; i < NUM_VALUES; i++)
{
result_data[i] = (uint16_t)input_data[2*i] << 8 | input_data[2*i+1];
printf("result[%d] = 0x%04x == %5u\n", i, result_data[i], result_data[i]);
}
}
输出:
~/tests$ ./test
result[0] = 0x0102 == 258
result[1] = 0x0d60 == 3424
result[2] = 0x0506 == 1286
result[3] = 0x0708 == 1800
result[4] = 0x090a == 2314
如您所见,十六进制和十进制只是相同值的表示。
我有一个包含一些十六进制值的 CHAR 缓冲区 首先,我想连接数组的每 2 个连续元素,然后将其转换为 Decimal 例如我有 recvbuf[i] = d 和 recvbuf[i+1 ] = 60 >>> recvbuf[i] = d60(十六进制值)>>> recvbuf[i] =3424 (十进制)
我是从这个开始的:
recvbuf[i]=recvbuf[i]&recvbuf[i+1];
你能帮忙把recvbuf[i]转换成十进制值吗
虽然你的问题缺乏一些信息,但我尽量提供我所理解的答案。
#include <stdio.h>
#include <stdint.h>
#define NUM_VALUES 5
int main(void)
{
uint8_t input_data[NUM_VALUES * 2] = {1, 2, 0x0d, 0x60, 5, 6, 7, 8, 9, 10};
uint16_t result_data[NUM_VALUES];
for (int i = 0; i < NUM_VALUES; i++)
{
result_data[i] = (uint16_t)input_data[2*i] << 8 | input_data[2*i+1];
printf("result[%d] = 0x%04x == %5u\n", i, result_data[i], result_data[i]);
}
}
输出:
~/tests$ ./test
result[0] = 0x0102 == 258
result[1] = 0x0d60 == 3424
result[2] = 0x0506 == 1286
result[3] = 0x0708 == 1800
result[4] = 0x090a == 2314
如您所见,十六进制和十进制只是相同值的表示。