如何将c中的hex值转换为等效的char*值。例如,如果十六进制值是1df2char*也应该包含1df2
我正在为VinC中的VinL使用VNC2 USB Chip编译器和FTDI链接器。它有以下头文件:stdlib、stdio和string。然而,这些是主c库的子集,没有明显的答案,例如snprintfsprintf
文件上说以下类型是有效的,
在整个内核和驱动程序中都使用了变量和函数类型的某些定义。它们可用于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/

10-16 09:15