Tibor Kiss (下のリンク) によって作成された単純な C 関数を見ています。1 つのバイナリ バイトを 2 つの 16 進文字に変換するには、「W」(0x57) を追加する必要があることを理解しようとしています。なぜこれが行われているのですか?
>> は文字 c を右に 4 桁シフトする (左側のビットを 0 で埋める) ことを理解しています。また、ビットごとの AND を使用して x の上位 4 ビットをマスクするだけの x=c&0x0f 部分も理解しています。
バイナリ バイトを 16 進数に変換するために 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;
}