繁体   English   中英

将ASCII代码转换为字符串

[英]Turning ascii code to a string

我在将向量中的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',但输出是数字...我做了很多搜索,但似乎没有任何效果,我尝试了fucntion itoa,snprintf和sprintf,但似乎没有任何效果。

这是您程序的一些改进:

  • 要使用sprintf调用进行操作,必须使用%s将其读取为字符串,而不能使用%d来获取数字。 由于这些“字符串”不是以nul终止的真实字符串,因此必须使用%.4s将字符串的长度限制为4个字节。

  • 数组x具有三个元素,但是sizeof(x)返回以字节为单位的大小(通常为12)。 因此,要进行三遍迭代,您需要计算总大小除以一个元素的大小。 这将为您提供元素数量(以一种通用的方式来通用此方法,以#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))

  • buf变量太小,您需要增加一个以容纳12个字符的空间+ nul终止字符\\0一个字节。

  • 如果希望将“ abcdefghijkl”作为输出,则需要颠倒x初始化的顺序,或者需要颠倒循环以从最大的数字开始并减小到零。 即使这样,您也遇到了忍耐问题。

  • 该循环可以优选地被转换为for循环。

  • 主要功能应具有适当的签名。

用测试

#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

下面经过修改的程序将输出“ abcdefghijkl”

#include <stdio.h>

main()
{

   //Having 'abcdefhgijkl', the position 0 is 'l'.
   int x[3] ={0};
   int n = 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+1] = {'\0'};
   char *ptr = (char*)x + sizeof(x)-1;


   while(i < sizeof(x)){
      sprintf(((char*)buf+i),"%c",*ptr);
      i++;
      ptr--; 
   } 

   printf("The string is = %s\n",buf);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM