gpt4 book ai didi

c - 将 ascii 码转换为字符串

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:46 26 4
gpt4 key购买 nike

我在将 vector 中的 ascii 码转换为字符串时遇到问题...示例...

main(){
//Having 'abcdefhgijkl', the position 0 is 'l'.
int x[3] ={0};
x[2] = ('a'<<24) + ('b'<<16) + ('c'<<8) + 'd';
x[1] = ('e'<<24) + ('f'<<16) + ('g'<<8) + 'h';
x[0] = ('i'<<24) + ('j'<<16) + ('k'<<8) + 'l';

int i = 0;
char buf[12];

while(i < sizeof(x)){
sprintf(buf,"%d",x[i]);
printf("%s \n", buf);
i++;
}
}

我的意图是打印“abcdefghijkl”,但输出的是数字...我进行了很多搜索,但似乎没有任何效果,我尝试了函数 itoa、snprintf 和现在的 sprintf,但似乎没有任何效果。

最佳答案

以下是对您的程序的一些改进:

  • 要使用 sprintf 调用执行您尝试执行的操作,您必须使用%s 将其作为字符串读取,而不是 %d 只会给你数字。由于这些“字符串”不是真正的以 nul 结尾的字符串,您必须使用 %.4s 将字符串的长度限制为 4 个字节。

  • 数组 x 具有三个元素,但 sizeof(x) 返回的大小为字节为 12(通常)。所以为了迭代三次你需要计算总大小除以一个元素的大小。那会给你一些元素(在一般方法为 #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))

  • buf变量太小,需要加1才能有12 个字符的空间 + 一个字节用于 nul 终止字符 \0.

  • 如果你想要“abcdefghijkl”作为输出,你需要颠倒顺序x 初始化或者你需要反转循环以从最高数字开始并降至零。即使那样你也会遇到 endianess问题。

  • 最好将循环转换为for循环。

  • main 函数应该有一个正确的签名。

测试

#include <stdio.h>

int main(int argc, char *argv[]){
int x[3] ={0};
x[0] = ('a'<<24) + ('b'<<16) + ('c'<<8) + 'd';
x[1] = ('e'<<24) + ('f'<<16) + ('g'<<8) + 'h';
x[2] = ('i'<<24) + ('j'<<16) + ('k'<<8) + 'l';

int i;
char buf[12 + 1];

for (i = 0; i < sizeof(x)/sizeof(int); i++){
sprintf(buf,"%.4s", (char *)&x[i]);
printf("%s \n", buf);
}
return 0;
}

它给出以下输出:

dcba
hgfe
lkji

关于c - 将 ascii 码转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22463842/

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