我正在查看一个由 Tibor Kiss 创建的简单 C 函数(链接如下)。我试图了解如何将单个二进制字节转换为两个十六进制字符涉及添加“W”(0x57)。为什么要这样做?
我知道 >> 将字符 c 向右移动了四个位置(用 0 填充左侧位)。我也理解 x=c&0x0f 部分,它只是使用按位与屏蔽 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;
}