加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C unsigned char字符串数组

发布时间:2020-12-16 07:32:18 所属栏目:百科 来源:网络整理
导读:我有一个像这样的字符串数组 char *T[] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"}; 但是,当我这样做时,每个字符串都是一个无符号字符数组 unsigned char *T[] = {"0000","1111
我有一个像这样的字符串数组

char *T[] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};

但是,当我这样做时,每个字符串都是一个无符号字符数组

unsigned char *T[] = {"0000","1111"};

我得到错误“初始化’unsigned char *’,其表达式为’char [5]’,指针转换为具有不同符号的整数类型.”我猜这意味着正在使用的“0”和“1”的某些表示已经签名,但我不确定为什么/如何处理它.我想要一个字符串数组,其中每个字符串是一个无符号字符数组而不是有符号字符.有人可以帮忙吗?

注意:这是针对硬件问题,但不是实际问题,只是许多可能解决方案中的一小步.但是,如果你能帮助我理解它而不给我一个明确的答案,那将是件好事.谢谢.

解决方法

C字符串是人们可以表示字符串的众多方式之一,由char数组组成,后者由尾随char终止,其值为null.当你的代码中有“0000”时,这就是你的类型.

你想要的是将“0000”指定为一个unsigned char数组,该数组由一个具有null值的尾随unsigned char终止.考虑到您的开始,您必须以不需要强制转换的方式强制转换或表示您的初始数据.

unsigned char T[][] = { { 0x30,0x30,0x00 },{ 0x30,0x31,{ 0x31,0x00 }
              };

我用这种方法看到的主要问题是它首先消除了拥有C风格字符串的大部分优点.使用unsigned char“string”,您没有任何标准字符串库可供使用,因此如果要使用printf或任何其他面向字符串的函数,则必须转换回已签名的char字符串类型.

实际上,您只为每个可能的字符位置“0”和“1”使用两个值.除非有令人信服的理由在字符串中执行此操作,否则请考虑一个布尔值数组,以减少像“0hello”这样的字符串在代码中运行的可能性,或者更好的是如果您已经介绍到位字段,请使用unsigned char中的位作为位字段(丢弃您处理字符串的任何概念).

最后一种技术的优点包括使用更少的内存和不能使值不是0或1;但是,您必须编写一小组例程来将打包位转换为人类可读的内容.

unsigned char[] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F };

void displayChar(unsigned char value) {
  switch (value) {
    case 0x00: printf("0000"); break;
    case 0x01: printf("0001"); break;
    case 0x02: printf("0010"); break;
    case 0x03: printf("0011"); break;
... and so on ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读