/**
* @brief ACSII change to hexadecimal
*
* @param src The string is big end mode; less than 8 bits, and 0 is automatically added at the end
* @param dest hexadecimal
* @param size size
*/
void str2hex(char *src, uint8_t *dest, uint32_t size)
{
uint8_t i = 0, j = 0, data = 0;
memset(dest, 0, size);
for (i = 0; i < size; i++)
{
for (j = 0; j < 2; j++)
{
if ((src[2 * i + j] >= '0') && (src[2 * i + j] <= '9'))
{
data |= (src[2 * i + j] - '0') << 4 * (1 - j);
}
else if ((src[2 * i + j] >= 'A') && (src[2 * i + j] <= 'F')) // Capital
{
data |= (src[2 * i + j] - ('A' - 0x0a)) << 4 * (1 - j);
}
else if ((src[2 * i + j] >= 'a') && (src[2 * i + j] <= 'f')) // littlecase
{
data |= (src[2 * i + j] - ('a' - 0x0a)) << 4 * (1 - j);
}
}
dest[i] = data;
data = 0x00;
}
}
/**
* @brief hexadecimal change to ACSII
*
* @param src hexadecimal
* @param dest ACSII
* @param size hexadecimal size
*/
void hex2str(uint8_t *src, char *dest, uint32_t size)
{
uint8_t i = 0, j = 0, data = 0;
for (i = 0; i < size; i++)
{
for (j = 0; j < 2; j++)
{
data = (src[i] >> (4 * (1 - j))) & 0x0F;
if (data <= 0x09) //((data >= 0x00) && (data <= 0x09)) //
{
dest[2 * i + j] = data + '0';
}
else if ((data >= 0x0A) && (data <= 0x0F)) // Capital
{
dest[2 * i + j] = data + 'A' - 0x0a;
}
}
}
}
C语言字符串和16进制相互转换
最新推荐文章于 2023-12-28 11:26:08 发布