C 字符串是表示字符串的多种方式之一,由具有值char
的尾随终止的数组组成。当你的代码中有“0000”时,这就是你得到的类型。char
null
您想要的是将“0000”分配为由具有空值unsigned char
的尾随终止的数组。unsigned char
考虑到您从什么开始,您将不得不进行转换,或者可能以不需要转换的方式表示您的初始数据。
unsigned char T[][] = { { 0x30, 0x30, 0x30, 0x30, 0x00 },
{ 0x30, 0x30, 0x30, 0x31, 0x00 },
{ 0x30, 0x30, 0x31, 0x30, 0x00 },
{ 0x30, 0x30, 0x31, 0x31, 0x00 },
{ 0x30, 0x31, 0x30, 0x30, 0x00 },
{ 0x30, 0x31, 0x30, 0x31, 0x00 },
{ 0x30, 0x31, 0x31, 0x30, 0x00 },
{ 0x30, 0x31, 0x31, 0x31, 0x00 },
{ 0x31, 0x30, 0x30, 0x30, 0x00 },
{ 0x31, 0x30, 0x30, 0x31, 0x00 },
{ 0x31, 0x30, 0x31, 0x30, 0x00 },
{ 0x31, 0x30, 0x31, 0x31, 0x00 },
{ 0x31, 0x31, 0x30, 0x30, 0x00 },
{ 0x31, 0x31, 0x30, 0x31, 0x00 },
{ 0x31, 0x31, 0x31, 0x30, 0x00 },
{ 0x31, 0x31, 0x31, 0x31, 0x00 }
};
我看到这种方法的主要问题是它首先消除了拥有 C 样式字符串的大部分优势。使用无符号字符“字符串”,您没有任何标准字符串库可供您使用,因此如果您想使用,则必须转换回有符号字符字符串类型printf
,或任何其他面向字符串的函数。
实际上,您只为每个可能的字符位置“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 ...