我需要将u16(无符号2字节整数)转换为字符串(非ASCII码)。 如何将无符号整数(u16)转换为字符串值(char *)?
我需要将u16(无符号2字节整数)转换为字符串(非ASCII码)。 如何将无符号整数(u16)转换为字符串值(char *)?
/* 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];
uint16_t
是一个无符号 16 位整数,只需要两个 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
CHAR_BIT==8
,并且保留了以_t
结尾的类型名称的使用,但是没有迹象表明OP正在使用POSIX系统。 - dreamlaxsprintf
:sprintf(str, "%u", a); //a is your number ,str will contain your number as string
我不完全清楚你想要做什么,但听起来你需要的是一个简单的转换。
uint16_t val = 0xABCD;
char* string = (char*) &val;
请注意,一般情况下字符串不是以0字节结尾的C字符串,因此不要对其进行任何危险操作。
sprintf
吗? - Giuseppe Pes