如何将c中的hex
值转换为等效的char*
值。例如,如果十六进制值为1df2
,则char *还应包含1df2
。
我正在使用VinC
编译器和来自VinL
的{{1}} VNC2 USB Chip
链接器。它有以下头文件; stdlib , stdio 和字符串。这些是主要c库的子集,没有明显的答案,例如FTDI
或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 *
有什么建议吗?
答案 0 :(得分:5)
使用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';
}
(应该清楚如何将其扩展到更宽的数字)。
答案 1 :(得分:0)
尝试sprintf:
int to_hex(char *output,unsigned n)
{
return sprintf(output, "%.4x", n);
}
它不如caf的回答安全,但如果你有stdio应该可以工作。因此,必须确保输出缓冲区足够大以容纳结果字符串。
答案 2 :(得分:0)
这样的事情应该这样做:
void to_hex(char *buffer, size_t size, unsigned n)
{
size_t i;
size_t j;
char c;
unsigned digit;
// Print digits in the reverse order
for (i = 0; i < size - 1; ++i)
{
digit = n & 0xf;
buffer[i] = digit < 10 ? digit + '0' : digit - 10 + 'A';
n >>= 4;
if (n == 0)
{
break;
}
}
// Append NUL
buffer[i + 1] = 0;
// Reverse the string
for (j = 0; j < i / 2; ++j)
{
c = buffer[j];
buffer[j] = buffer[i - j];
buffer[i - j] = c;
}
}
但是你说你有stdio
可用,所以不需要自己写这样的东西。
编辑:可能是编译器期望K&amp; R样式原型:
void to_hex(buffer, size, n)
char *buffer;
size_t size;
unsigned n;
{
...
在Codepad上试试。