4

我需要将 u16(unsigned int -2 byte) 值转换为字符串(不是 ascii)。如何将 unsigned int(u16) 转换为字符串值(char *)?

4

4 回答 4

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;

更新:为了完整起见,另一种表示 an 的方式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];
于 2013-08-06T07:22:57.777 回答
3

一个uint16_t值只需要两个unsigned char对象来描述它。高字节先出现还是最后出现取决于您平台的字节序:

// 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
于 2013-08-06T07:31:44.783 回答
1

您可以使用sprintf

sprintf(str, "%u", a); //a is your number ,str will contain your number as string
于 2013-08-06T07:24:06.203 回答
1

目前还不完全清楚你想要做什么,但在我看来你想要的是一个简单的演员表。

uint16_t val = 0xABCD;
char* string = (char*) &val;

请注意,该字符串通常不是以 0 字节结尾的 C 字符串,因此不要对它做任何危险的事情。

于 2013-08-06T07:25:07.877 回答