位表示的字符

时间:2014-10-17 21:56:47

标签: c character-encoding bit

哪个字符有所有零的位表示?

对于上下文,我想知道如何获得所有零的数组和新的c / c ++

unsigned char** result = (unsigned char**) malloc(sizeof(unsigned char)
                                                * rows);
for (int i = 0 ; i < rows ; i++) {
     result[i] = (unsigned char *) malloc(sizeof(unsigned char) * cols);
     memset(result[i], 0, sizeof(unsigned char) * cols);
   }

当我尝试打印位表示时(使用c&amp; 128,c&amp; 64,我仍然得到设置的位)

例如:(对于rows = 3和cols = 2)

00100000 00110111
00000000 00000000
00000000 00000000

2 个答案:

答案 0 :(得分:1)

在第一行中,您的malloc正在分配错误的大小。你正在分配一个unsigned char,当你应该分配足够的指针时,如下所示。

unsigned char** result = (unsigned char**) malloc(sizeof(unsigned char *) * rows);

这意味着在循环中分配的早期指针的最重要字节正被后续的malloc结果破坏。因此,当您查看result[i]时,您实际上并没有真正在内存中查找正确的位置。

答案 1 :(得分:-1)

看起来你滥用了类型

unsigned char**

你把它视为一个数组,但它只是指向unsigned char的指针。 尝试替换

unsigned char** result = (unsigned char**) malloc(sizeof(unsigned char) * rows);

unsigned char* result[] = new (unsigned char*)[rows];

然后你就可以对数组中的变量结果进行操作。

并替换

result[i] = (unsigned char *) malloc(sizeof(unsigned char) * cols);

result[i] = new unsigned char[cols];

释放内存时,您还需要调用

delete[] result[i]; 

delete[] result; 

而不是

free()