如何将无符号int(u16)转换为字符串值(char*)?

如何将无符号int(u16)转换为字符串值(char*)?,c,C,我需要将u16(无符号整数-2字节)值转换为字符串(非ascii)。 如何将无符号int(u16)转换为字符串值(char*) 更新:如果我们不想将数字转换为文本,而是转换为实际字符串(出于我无法理解的原因),只需通过以下方法即可: char *str = (char *) (intptr_t) my_uint16; 或者,如果要查找同一地址的字符串: char *str = (char *) &my_uint16; 更新:为完整起见,表示uint16\t的另一种方式是将四个十六进制

我需要将u16(无符号整数-2字节)值转换为字符串(非ascii)。 如何将无符号int(u16)转换为字符串值(char*)

更新:如果我们不想将数字转换为文本,而是转换为实际字符串(出于我无法理解的原因),只需通过以下方法即可:

char *str = (char *) (intptr_t) my_uint16;
或者,如果要查找同一地址的字符串:

char *str = (char *) &my_uint16;
更新:为完整起见,表示
uint16\t
的另一种方式是将四个十六进制数字串联起来,需要4个字符。跳过
我们真的想要一个\u指针
考验,下面是代码:

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];

您可以使用
sprintf

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字符串,因此不要对其进行任何危险操作。

a
uint16\t
值只需要两个
无符号字符
对象来描述它。较高的字节是第一个还是最后一个取决于平台的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

用什么语言?C++?我想用C语言写这个。如果你不想在ASCII中使用字符串,你想要字符串的编码是什么?字符串有什么问题?你不能使用sprintf吗?你试过sprintf()吗;这会将其转换为文本,而这不是OP想要的(我假设OP不是ASCII就是这个意思)。访问对象的字节表示(用于二进制序列化等)是很常见的。这也包括在内。他想转换为cast。正如我所说的,我不清楚。我认为我对这个问题的解释是完全合理的,尽管我可能不正确。uint16_t中有多少个字符也取决于你的平台(过去N年中一直在使用16位字符的平台上工作的人说)。只有当你使用C99 stdint.h。没有任何东西表明非C99实现不能提供名为uint16\u t的16位类型!不,你说得很对。POSIX系统确实要求字符位=8,并且保留使用以
\t
结尾的类型名称,但没有迹象表明OP正在使用POSIX系统。
// 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