gpt4 book ai didi

C语言十六进制转二进制

转载 作者:太空狗 更新时间:2023-10-29 15:28:16 27 4
gpt4 key购买 nike

我目前正在维护从以前的开发人员那里继承的代码。我必须了解一个将 ID 从十六进制转换为二进制的函数。我无法完全理解他背后的逻辑。下面是代码,

int iHex2Bin(char * pchIn, char * pchOut, int iLen)
{
int i;

memset(pchOut, 0, iLen);

for(i=0; i<iLen; i++)
{
pchOut[i] = (((unsigned char) *pchIn)-0x30)*16;
pchIn++;
pchOut[i] += (((unsigned char) *pchIn)-0x30);

pchIn++;
}
return(0);
}

顾名思义,它将 Hex 转换为 Bin。我不明白该功能的逻辑。谁能解释一下?谢谢。

感谢您的回答。现在有点清楚了。我还添加了相反的功能以进行更多分类,

int iBin2Hex(char * pchIn, char * pchOut, int iLen){ 诠释我;

unsigned char chInBuff[256]={0};
char chOutBuff[513]={0};
char chTemp[3]={0};

if(iLen>256)
return(-2);

memcpy(chInBuff, pchIn, iLen);
for(i=0; i<iLen; i++)
{
sprintf(chTemp, "%02X", chInBuff[i]);
strcat(chOutBuff, chTemp);
}

memcpy(pchOut, chOutBuff, iLen*2 + 1);
return(SUCCESS);

我觉得这个功能是必要的,而且功能名称很困惑。可以使用C库函数。但是代码运行正常,所以我没有做任何更改。如果将来需要,我只需要了解代码即可。

最佳答案

我不认为这个函数完全按照你说的去做。它以一串字符作为输入,并产生另一串字符作为输出,但我会犹豫将输入标记为“十六进制”。输出是一个包含二进制值的带符号字节序列。

让我们看一下代码的核心:表达式(((unsigned char) *pchIn)-0x30)。这将读取单个字符并减去 0x30,这是 '0' 的 ASCII 值。因此,此表达式正确地将 ASCII 数字转换为 0 到 9 之间的值。它不能正确处理任何其他字符。具体来说,它不会为字符 'A''F''a' 生成正确的值 10-15 'f'。输入字符串中的交替字符乘以 16 的事实......不,这不足以使这个十六进制。

本质上它正在做的是获取一个(可能是偶数长度的)字节串A,B,C,D, ... 并将其转换为字节串 A*16+B, C*16+D, ...

最好使用标准库函数之一将字符串转换为实际的二进制值(例如,int),这很容易检查、打印等on... 然后将该二进制值转换为不同格式的另一个字符串。查阅任何手册或在线文档。我相信 strtolltoa 会满足您的需求。

关于C语言十六进制转二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com