【发布时间】:2021-08-01 22:16:21
【问题描述】:
我想转换 unsigned long long
0xabcd1234
到这个字符串
3412cdab
*我们希望保留前导零,例如 0x1 将转换为该字符串“01000000”,而 0x123 将转换为“23010000”
现在我成功编写了执行此操作的代码,但我想知道是否有更简单的方法
char* encode_long_long_hex(unsigned long long integer, char* out,
int len, size_t *out_len)
{
static char encode_hex_char_arr[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
};
char* dst = out;
unsigned idx = count_long_long_digits(integer); //return number of digits
while (idx && dst < out + len)
{
idx -= 2;
*dst = encode_hex_char_arr[(integer & 0xF0) >> 4];
dst += sizeof(char);
*dst = encode_hex_char_arr[integer & 0x0F];
dst += sizeof(char);
integer >>= 8;
}
*out_len = (int) (dst - out);
return dst;
}
谢谢!
【问题讨论】:
-
0x12345怎么样。预期的输出是什么? -
char *string="3412cdab";。更简单 更严重的是,为什么不printf(string, "%02X%02X%02X%02X", lValue&0xFF, lValue>>8&0xFF, lValue>>16&0xFF, lValue>>24&0xFF);? (但要注意整数的字节序) -
@Zilog80 实际上字节序在这里并不重要,您发布的代码(与我的回答一致)与字节序无关。
-
@EugeneSh。你是对的,对不起,我错过了你的答案(我指出 Endianess 是 long long 值的起源
-
@ 0_______________ 它 0x12345 --->。 45230100
标签: c bit-manipulation bit