gpt4 book ai didi

c - C 中二进制字符到十六进制的转换

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

我正在查看由 Tibor Kiss(下面的链接)创建的一个简单的 C 函数。我试图了解将单个二进制字节转换为两个十六进制字符如何涉及添加“W”(0x57)。为什么要这样做?

我理解 >> 将字符 c 右移四位(用 0 填充左侧位)。我也理解 x=c&0x0f 部分,它只是使用按位 AND 屏蔽了 x 的高四位。

我只是不知道为什么将二进制字节转换为十六进制会涉及添加 ASCII“W”(0x57)。

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en543105

/******************************************************************************
* Function: void btoh(unsigned char c,char *str)
*
* PreCondition: None
*
* Input: str - pointer to the zero terminated string
* c - byte to convert
*
* Output: None
*
* Side Effects: None
*
* Overview: Convert one byte to a 2 character length hexadecimal
* zero terminated string
*
* Note: Using static variable for less code size
*****************************************************************************/
void btoh(unsigned char c,char *str)
{
static unsigned char x;
x=c>>4;
*str=x+(x>9?'W':'0');
x=c&0x0f;
str[1]=x+(x>9?'W':'0');
str[2]=0;
}

最佳答案

他添加'W'的原因是他简化了这个表达式:

*str=x+(x>9? ('a'-10) :'0');

他观察到 'W''a'-10,并将简化的常量输入到他的代码中。这不是一个好主意,因为如果不查看 ASCII 表就很难理解发生了什么。此外,编译器无论如何都会将 'a'-10 表达式简化为相同的精确值,因此会损失可读性,并且不会带来任何特别的好处。

关于c - C 中二进制字符到十六进制的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18176960/

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