二进制零和 ASCII 字符零之间的区别

2023-12-03

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(使用前将#替换为@)

二进制零和 ASCII 字符零之间的区别 的相关文章

  • 为什么“dtoa.c”包含这么多代码?

    我将是第一个承认我对低级编程的整体知识有点稀疏的人 我理解许多核心概念 但我不经常使用它们 话虽这么说 我对需要多少代码感到非常惊讶dtoa c http www netlib org fp dtoa c 在过去的几个月里 我一直致力于用
  • 如何在 Caliburn.Micro 中使用 Conductor 的依赖注入

    我有时用Caliburn Micro http caliburnmicro com创建应用程序 使用最简单的 BootStrapper 我可以像这样使用 IoC 容器 SimpleContainer private SimpleContai
  • 为什么在 lambda 内部引发异常是 C# 7 的一项功能? [复制]

    这个问题在这里已经有答案了 该语句在 VS2015 中无法编译 但在 VS2017 中可以编译 var example new Action gt throw new Exception 为了支持在 lambda 表达式内抛出异常 必须对
  • 更改图像颜色与透明背景

    我需要使用 c System Drawings 将透明背景上带有绿色圆圈的图像加载到位图图像中 这是最简单的部分 但是 我需要在将其添加到更大的图像之前更改圆圈的颜色 而不影响周围的透明度 就我而言 我需要将圆圈颜色更改为黄色并将其添加为太
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • 为什么 fgets 接受 int 而不是 size_t?

    功能如strcpy malloc strlen 和其他各种接受他们的参数或返回值作为size t代替int or an unsigned int出于显而易见的原因 一些文件功能 例如fread and fwrite use size t以及
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • 将 std::pair const 转换为 std::pair const 安全吗?

    理论上或实践上 安全吗reinterpret cast a std pair
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • _MM_TRANSPOSE4_PS 在 GCC 中导致编译器错误?

    我第一次在 GCC 而不是 MSVC 中编译我的数学库 并经历了所有的小错误 我遇到了一个根本没有意义的错误 Line 284 error lvalue required as left operand of assignment 284号
  • FFplay成功移入我的Winform中,如何设置它无边框?

    用这个代码 在 C 应用程序中显示 tcp 视频流 来自 FFPLAY FFMPEG https stackoverflow com questions 14201894 show a tcp video stream from ffpla
  • 使用 FromBase64Transform 解码 base64 文件流

    The example https msdn microsoft com en us library system security cryptography frombase64transform 28v vs 110 29 aspx从M
  • 如何将输出重定向到 boost 日志?

    我有一个使用boost log的C 程序 我加载了用户提供的动态链接库 我想将 stderr 重定向到 boost 日志 以便用户的库随时执行以下操作 std cerr lt lt Some stuff 它产生相同的结果 BOOST LOG
  • 解析连接字符串

    是否有标准库或代码片段可以使用这样的连接字符串获取值 string connstr DataServiceUrl http localhost foo RemoteServerConnection server http localhost
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • 如何在realm-dotnet中存储System.Collections.Generic.Dictionary

    我正在尝试将 Realm NET 集成到我的 uwp 项目中 我想知道是否有任何方法可以在 Realm dotnet 库中存储 System Collections Generic Dictionary 我试过这个 public class
  • 从数据库配置中的连接字符串中删除 SSIS 密码

    我有一个 SSIS 包 它使用 SQL 服务器中的 SSIS 配置表来检索 OLE DB 连接管理器的连接字符串属性 问题是我还需要相同的连接字符串来调用使用实体框架的程序集 我尝试访问连接管理器连接字符串属性 但 SSIS 总是删除密码
  • 推断“x => { throw .. }”的 Lambda 与重载方法中的 Func 匹配吗?

    我不明白为什么 C 最终在以下 LINQPad 代码中执行不正确的扩展方法 void Main Actual Sync Action Expected Sync Action Run x gt x Dump Actual Async Tas
  • 从 C/C++ 程序进行 Ping

    我想编写一个 C 或 C 程序 给定一个 IP 地址 对其进行 Ping 然后根据 Ping 是否成功执行进一步的操作 这个怎么做 尽情享受Ping 页面 http www ping127001 com pingpage htm 其中有一个

随机推荐

  • 使用 Accelerate 框架的无符号 8 位整数的求和数组

    我可以使用 Accelerate Framework 对无符号 8 位整数数组求和 而不转换为浮点数数组吗 我目前的做法是 vDSP vfltu8 intArray 1 floatArray 1 size vDSP sve floatArr
  • Eclipse 中内存不足错误

    我正在尝试通过更新站点在我的 eclipse ganymede 中安装 Spring 框架http springide org updatesite 但是当它更新时 我的IDE中会出现错误 提示发生内存不足错误 尝试提高 eclipse i
  • 尝试循环更新日期和时间

    我想同时打印和更新日期和时间 下面的代码只需要一次时间 并打印相同的时间 40 次 如何在打印时更新时间 public class Dandm public static void main String args DateFormat d
  • iPhone 上无法解释的分段错误

    在设备中运行我们的应用程序时 我遇到了这个非常令人不安的问题 调试方案一切顺利 但使用分发配置文件 具有用于代码签名的 AdHoc 证书的配置文件 应用程序崩溃 并且我在设备登录中遇到的唯一错误是 Tue Oct 4 10 49 44 un
  • 将 PySpark Dataframe 过滤器的结果收集到变量中

    我正在使用PySpark数据框 我的数据集包含三个属性 id name and address 我试图根据以下内容删除相应的行name价值 我一直在努力变得独一无二id我要删除的行的 ID df filter df name Bruce s
  • Google Apps 脚本 - 从电子表格创建 PDF 生成 Google 登录页面的 pdf

    需要一些帮助 我有点困惑 我已经为电子表格编写了一个谷歌应用程序脚本 可以从自定义菜单访问 该脚本应该创建电子表格页面的 pdf 并将其保存在我的谷歌驱动器中 代码执行正常并创建了一个 pdf 文件 但我得到的只是 google 登录页面的
  • 如何在设计器中单击用户控件子项?

    我在创建一个自定义控件时遇到了一些麻烦 我拥有的是用户控件中的一个列表框 我需要能够在设计器中单击列表项 这将使它的行为与选项卡控件非常相似 我没有过多处理用户控件 但我尝试捕获一些覆盖事件 但没有成功 protected override
  • 在 Google(日历事件).Net API 中获取“显示”可用/忙碌值

    有谁知道如何使用 Google NET API 获取 show me 值 我知道如何获取大部分 EventEntry 详细信息 但我就是无法获取此信息 就是下图中突出显示的那个 在更改事件的值后 我向日历原子提要发出了直接请求 以查看事件
  • 根据另一个下拉列表中的选择填充一个下拉列表,然后重定向

    我正在尝试构建一个两层下拉菜单 其中第二个下拉菜单填充第二个下拉菜单 我在网站上找到了很多示例 但我希望我的菜单在选择第二个菜单后重定向到一个页面 但无法弄清楚这一点 我对 JS 不太了解 所以请耐心等待 下面的代码是来自另一篇文章的示例
  • 如何从给定的url中提取参数

    在Java中我有 String params depCity PAR roomType D depCity NYC 我想得到的值depCity参数 PAR NYC 所以我创建了正则表达式 String regex depCity Patte
  • 如何使用Titanium查询父视图的子视图?

    我希望创建一个通用的例程 可以对视图的子项进行操作 在例程中 我需要能够迭代子视图 我在 API 中没有看到任何表明有任何方法可以获取子视图的内容 有一个 add 和一个 remove 方法 但没有像 get 这样的方法 也没有像 view
  • 如何在我的应用程序中实现 UITapGestureRecognizer

    我对编程和 Objective C 很陌生 我想知道如何制作一个具有空白屏幕和一分钟计时器的应用程序 您应该尽可能快 尽可能长时间地敲击 我想知道如何实施UITapGestureRecognizer进入我的代码 这是有关如何在课堂上实现手势
  • MySQL备份数据库

    我尝试从我的 mysql 服务器备份数据库 我使用的是MYSQL 5 5 我使用以下命令来备份数据库 mysqldump root admin project gt projectbackup sql 我的用户名 root 密码 管理员 数
  • 离子原色动态变化

    有没有办法制作一个单独的主题 例如称为 BlueTheme 当主题激活时我可以在其中更改 colors 主要 次要 危险等变量 或者我是否必须手动更改应用这些颜色的类和位置 例如 BlueTheme Whenever this theme
  • 让 Paypal 立即重定向?

    PayPal 交易完成后 PayPal 会显示以下内容 Thanks for your order Your payment of XXXX XX USD is complete You re now going back to MYSIT
  • TinyMCE 4.2 - 获取新的(核心)图像工具来将(API)编辑后的图像保存为文件?

    如果这是重复的 我很抱歉 我还没有发现任何与此相关的问题 新的 TinyMCE 4 2 图像工具将图像保存为 base64 数据 而不是目录中的图像文件 在新发布的TinyMCE 4 2中有一个新的内联图像编辑器 参考 图像工具 效果很好
  • Laravel 迁移 150 错误

    我的迁移文件有错误 但是我找不到任何错误解决方案 当我运行迁移命令时 我在以下系统上收到该错误 Illuminate Database QueryException SQLSTATE HY000 General error 1005 Can
  • 使用shinymanager R嵌入图像

    我有一个闪亮的应用程序 我使用闪亮管理器包来处理用户身份验证 我正在尝试添加 www 文件夹中的图片作为身份验证背景 这是一个工作示例 当您运行该应用程序时 您当前将在背景中看到 R 徽标 我的 www 文件夹中有一个名为 pabackgr
  • SSIS 派生列 - 解析中断返回之间的文本

    我有一个来自 SQL Server 源的文本字段 它是一个电话号码字段 通常具有以下格式 Home 555 555 1212 Work 555 555 1212 Cell 555 555 1212 Emergency 555 555 121
  • 二进制零和 ASCII 字符零之间的区别

    gcc GCC 4 8 1 c89 Hello 我正在读一本关于指针的书 并使用此代码作为示例 memset buffer 0 sizeof buffer 将填充二进制零而不是字符零来填充缓冲区 我只是想知道二进制和字符零有什么区别 我以为