gpt4 book ai didi

c - 如何将 ANSI-C 从 unsigned int * 转换为 char *?

转载 作者:太空宇宙 更新时间:2023-11-04 04:08:39 27 4
gpt4 key购买 nike

我希望这两个打印函数做同样的事情:

    unsigned int Arraye[] = {0xffff,0xefef,65,66,67,68,69,0};
char Arrage[] = {0xffff,0xefef,65,66,67,68,69,0};
printf("%s", (char*)(2+ Arraye));
printf("%s", (char*)(2+ Arrage));

其中 Array 是一个无符号整数。通常,我会更改类型,但问题是大多数数组都是数字,尽管特定部分应打印为 ASCII。目前,unsigned 数组打印为“A”,char 数组打印为所需的“ABCDE”。

最佳答案

这就是 unsigned int 版本在内存中的排列方式,假设是 32 位大端整数。

00 00 ff ff 00 00 ef ef 00 00 00 41 00 00 00 42
00 00 00 43 00 00 00 44 00 00 00 45 00 00 00 00

这就是 char 版本在内存中的排列方式,假设是 8 位字符。请注意 0xffff 不适合 char

ff ef 41 42 43 44 45 00

所以你可以看到,类型转换是不够的。您需要实际转换数据。

如果您知道您的系统使用 32 位 wchar_t,则可以为 printf 使用 l 长度修饰符。

printf("%ls", 2 + Arraye);

这不是可移植的。另一种方法是手动将 unsigned int 数组复制到 char 数组中,如下所示:

void print_istr(unsigned int const *s)
{
unsigned int const *p;
char *s2, *p2;
for (p = s; *p; p++);
s2 = xmalloc(p - s + 1);
for (p = s, p2 = s2; *p2 = *p; p2++, p++);
fputs(s2, stdout);
free(s2);
}

关于c - 如何将 ANSI-C 从 unsigned int * 转换为 char *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2620501/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com