C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C unsigned char字符串数组大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个像这样的字符串数组

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 ...

大佬总结

以上是大佬教程为你收集整理的C unsigned char字符串数组全部内容,希望文章能够帮你解决C unsigned char字符串数组所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: