C字符串是表示字符串的多种方式之一,由以
null
值结尾的
char
数组组成。当你的代码中有"0000"时,这就是你获得的类型。
你想要的是将"0000"赋值为一个以
null
值结尾的
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风格字符串的大部分优势。使用无符号字符“string”,您无法使用标准字符串库,因此如果要使用
printf
或任何其他面向字符串的函数,则必须将其强制转换回有符号字符字符串类型。
实际上,对于每个可能的字符位置,您仅使用了两个值“0”和“1”。除非有充分的理由将其作为字符串进行处理,否则请考虑使用布尔值数组来降低“0hello”这样的字符串出现在代码中的几率,或者更好的方法是,如果您已经学习了位域(bit fields)的概念,可以使用无符号字符内的位域(bit fields)(摒弃了任何涉及字符串的概念)。
最后一种技术的优点包括使用更少的内存和该值不能是除0或1之外的任何值;但是,您将不得不编写一小组例程来将压缩的位(bit)转换为可读的内容。
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 ...
char*
类型而不是unsigned char*
类型。 - Mysticialconst char*
上是正确的。我认为你试图做转换是出于错误的原因;你能描述一下你正在解决的更广泛的问题吗? - Sergey Kalinichenkochar[N]
,而不是const
。(但尝试修改字符串字面值是未定义行为。) - Daniel Fischer