使用AS
values 0... 9 <=> figures '0'...'9' <=> 0x30...0x39 in ASCII code; values 10...15 <=> figures 'A'...'F' <=> 0x41...0x46 in ASCII code; or 'a'...'f' <=> 0x61...0x66 in ASCII code;
有时小写字母用于’a’到’f’。
因此,如果我们的半字节的值低于10(0000b到1001b),则字符表示将为0x30 + n,或者在c语法中为“0”+ n。
如果n在10到15(1010b到1111b)0x41 + n – 10或’A’+ n-10之间。
使用unsigned int 8bit而不是char类型:
uint8_t nibble2char( uint8_t n ) { // make sure that ne {0x00,...,0x0F} if( n<10 ) return '0'+n; else return 'A'+n-10; }
或更短:
uint8_t nibble2char( uint8_t n ) { // make sure that ne {0x00,...,0x0F} return n<10 ? '0'+n : 'A'+n-10; }
或者作为一个宏(感谢(n)的chqrlie):
#define NIBBLE_TO_CHAR(n) ((n)<10 ? '0'+(n) : 'A'+(n)0) // n <= 15 !
如果使用小写字母,请将'A'替换为'a'。
将带有2个半字节的字节转换为2字节的0终止字符串,您可以使用:
void byte2str( uint8_t* s, uint8_t n ) { // s points to a string of at least 3 Bytes length ! uint8_t hi = ( n >> 4 ) & 0x0F ; uint8_t lo = n & 0x0F ; s[0] = NIBBLE_TO_CHAR( hi ); // high byte s[1] = NIBBLE_TO_CHAR( lo ); // low byte s[2] = 0; }
编辑:
通过将chqrlie校正到宏,函数变得更紧凑:
void byte2str( uint8_t* s, uint8_t n ) { // s points to a string of at least 3 Bytes length ! s[0] = NIBBLE_TO_CHAR( ( n >> 4 ) & 0x0F ); // high byte s[1] = NIBBLE_TO_CHAR( n & 0x0F ); // low byte s[2] = 0; }