我需要将u16(unsigned int -2 byte)值转换为字符串(不是ascii)。 如何将unsigned int(u16)转换为字符串值(char *)?
答案 0 :(得分:8)
/* The max value of a uint16_t is 65k, which is 5 chars */
#ifdef WE_REALLY_WANT_A_POINTER
char *buf = malloc (6);
#else
char buf[6];
#endif
sprintf (buf, "%u", my_uint16);
#ifdef WE_REALLY_WANT_A_POINTER
free (buf);
#endif
更新:如果我们不想将数字转换为文本,而是转换为实际的字符串(出于我对常识的看法),可以通过以下方式完成:
char *str = (char *) (intptr_t) my_uint16;
或者,如果您在同一地址的字符串之后:
char *str = (char *) &my_uint16;
更新:为了完整性,另一种呈现uint16_t
的方式是一系列四个十六进制数字,需要4个字符。跳过WE_REALLY_WANT_A_POINTER
考验,这是代码:
const char hex[] = "0123456789abcdef";
char buf[4];
buf[0] = hex[my_uint16 & f];
buf[1] = hex[(my_uint16 >> 4) & f];
buf[2] = hex[(my_uint16 >> 8) & f];
buf[3] = hex[my_uint16 >> 12];
答案 1 :(得分:3)
uint16_t
值只需要两个unsigned char
个对象来描述它。高字节是先到还是最后取决于您平台的 endianness :
// if your platform is big-endian
uint16_t value = 0x0A0B;
unsigned char buf[2];
buf[0] = (value >> 8); // 0x0A comes first
buf[1] = value;
// if your platform is little-endian
uint16_t value = 0x0A0B;
unsigned char buf[2];
buf[0] = value;
buf[1] = (value >> 8); // 0x0A comes last
答案 2 :(得分:1)
您可以使用sprintf
:
sprintf(str, "%u", a); //a is your number ,str will contain your number as string
答案 3 :(得分:1)
你想要做什么并不完全清楚,但听起来你想要的只是一个简单的演员。
uint16_t val = 0xABCD;
char* string = (char*) &val;
请注意,字符串一般不是0字节终止的C字符串,所以不要做任何危险的事情。