【发布时间】:2010-10-13 21:53:56
【问题描述】:
您好,我有一块包含位(位字面量)的内存(使用 malloc() 分配),我想将其读取为 char 数组,或者,更好的是,我想打印出 ASCII内存中连续 8 位的值。
我已将他的内存分配为 char *,但我无法以比评估每个位更好的方式取出字符,将值添加到 char 并在循环中左移 char 的值,但我一直在寻找更快的解决方案。 谢谢
我现在写的是这样的:
分配:
char * bits = (char*) malloc(1);
写给内存:
ifstream cleartext;
cleartext.open(sometext);
while(cleartext.good())
{
c = cleartext.get();
for(int j = 0; j < 8; j++)
{ //set(index) and reset(index) set or reset the bit at bits[i]
(c & 0x80) ? (set(index)):(reset(index));//(*ptr++ = '1'):(*ptr++='0');
c = c << 1;
}..
}..
直到现在我还无法恢复字符,我只能使用以下方式打印出位:
printf("%s\n" bits);
我正在尝试做的一个例子是:
input.txt 包含字符串“AAAB”
我的程序必须将“AAAB”作为“01000001010000010100000101000010”写入内存 (AAAB 的 ASCII 值是 65656566 位)
那我希望它有把内存内容改写成文件的功能。
因此,如果内存再次包含“01000001010000010100000101000010”,它将写入输出文件“AAAB”。
【问题讨论】:
-
“包含位”。你是说字节还是什么?
-
c++ 不允许你分配一次分配整个字符的“位”(通常是字节)。
-
我使用 malloc() 是因为我认为它会更快,并且因为我认为有一种更快(甚至更糟)的方式来读取和写入字符和位
-
我认为您对加载文件的含义感到非常困惑。在计算机中,一切都是二进制的。它只是在将字符串打印到屏幕上时将它们视为字母,以方便我们必须阅读它的人。如果您加载了一个角色,那么您“也”加载了这些位。
-
好吧,我感到困惑的是什么是快速访问内存中加载的文件位的最佳方法,如果它取决于我用来加载文件的数据类型,如果我可以可以快速访问它们中的每一个,而不是通过迭代