如何将c中的hex
值转换为等效的char*
值。例如,如果十六进制值是1df2
char*也应该包含1df2
。
我正在为VinC
中的VinL
使用VNC2 USB Chip
编译器和FTDI
链接器。它有以下头文件:stdlib、stdio和string。然而,这些是主c库的子集,没有明显的答案,例如snprintf
或sprintf
。
文件上说以下类型是有效的,
在整个内核和驱动程序中都使用了变量和函数类型的某些定义。它们可用于vos.h
头文件中的应用程序。
空指针和逻辑定义:
#define NULL 0
#define TRUE 1
#define FALSE 0
变量类型定义:
#define uint8 unsigned char
#define int8 char
#define int16 short
#define uint16 unsigned short
#define uint32 unsigned int
#define pvoid unsigned char *
函数类型定义:
typedef uint8 (*PF)(uint8);
typedef void (*PF_OPEN)(void *);
typedef void (*PF_CLOSE)(void *);
typedef uint8 (*PF_IOCTL)(pvoid);
typedef uint8 (*PF_IO)(uint8 *, unsigned short, unsigned short *);
typedef void (*PF_INT)(void);
有什么建议吗?
最佳答案
使用snprintf()
:
int to_hex(char *output, size_t len, unsigned n)
{
return snprintf(output, len, "%.4x", n);
}
考虑到它是一个相当基本的嵌入式系统的新信息,如果您只对16位数字感兴趣,那么像这样的最小解决方案可能就足够了:
/* output points to buffer of at least 5 chars */
void to_hex_16(char *output, unsigned n)
{
static const char hex_digits[] = "0123456789abcdef";
output[0] = hex_digits[(n >> 12) & 0xf];
output[1] = hex_digits[(n >> 8) & 0xf];
output[2] = hex_digits[(n >> 4) & 0xf];
output[3] = hex_digits[n & 0xf];
output[4] = '\0';
}
(应该很清楚如何将其扩展到更广泛的数字)。
关于c - 将十六进制值转换为char *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4434821/