gcc (GCC) 4.8.1
c89
Hello,
我正在读一本关于指针的书。并使用此代码作为示例:
memset(buffer, 0, sizeof buffer);
将填充二进制零而不是字符零来填充缓冲区。
我只是想知道二进制和字符零有什么区别。我以为这是同一件事。
我知道文本数据是人类可读的字符,二进制数据是不可打印的字符。如果我错了请纠正我。
二进制数据的一个很好的例子是什么?
作为补充示例,如果您正在处理字符串(文本数据),您应该使用fprintf
。如果您使用二进制数据,您应该使用fwrite
。如果你想将数据写入文件。
非常感谢您的任何建议,
快速回答是这个角色'0'
用二进制数据表示为 ASCII 数字 48。这意味着,当您想要该字符时'0'
,该文件实际上包含这些位:00110000
。同样,可打印字符'1'
十进制值为49,用字节表示00110001
. ('A'
为 65,表示为01000001
, while 'a'
为 97,表示为01100001
.)
如果您希望字符串末尾有空终止符,'\0'
,实际上有一个十进制值 0,因此将是一个全零的字节:00000000
。这确实是一个0值。对于编译器来说,两者没有区别
memset(buffer, 0, sizeof buffer);
and
memset(buffer, '\0', sizeof buffer);
对我们来说唯一的区别是语义上的区别。'\0'
告诉我们正在处理一个字符,而 0 只是告诉我们正在处理一个数字。
检查一下会对您有很大帮助ASCII表.
fprintf
使用 ASCII 输出数据并输出字符串。fwrite
写入纯二进制数据。如果你fprintf(fp, "0")
,它会将值 48 放入 fp 中,而如果您fwrite(fd, 0)
它会将实际值 0 放入文件中。 (注意,我的用法fprintf
and fwrite
显然不正确的用法,但说明了这一点。)
注意:我的答案指的是 ASCII,因为它是最古老、最著名的字符集之一,但正如 Eric Postpichil 在评论中提到的那样,C标准不绑定到 ASCII。 (事实上,虽然它偶尔会给出使用 ASCII 的示例,但该标准似乎不遗余力地从不假设 ASCII 将是所使用的字符集。)。fprintf
使用编译程序的执行字符集输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)