AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1537462
Accepted
Arctiic
Arctiic
Asked: 2020-04-01 02:13:14 +0800 CST2020-04-01 02:13:14 +0800 CST 2020-04-01 02:13:14 +0800 CST

这些“NUL”字符的目的是什么?

  • 772

这纯粹是出于学术上的好奇,但我经常在 Windows (Win10Pro64) 和 Android 上发现没有被混淆的文件,但在每个实际相关字符之间包含一堆NUL字符,因此很难按原样阅读在 Windows 上(至少在 Android 上,我使用的资源管理器应用程序 - X-plore - 在编辑模式下作为文本启动时似乎会自动删除)。这是一个例子: 截屏

text-formatting syntax
  • 3 3 个回答
  • 7324 Views

3 个回答

  • Voted
  1. Best Answer
    Attie
    2020-04-01T02:45:56+08:002020-04-01T02:45:56+08:00

    这是一个包含可打印 ASCII 字符集之外的字符的二进制文件。

    因为这些字符是“不可打印的”,Notepad++ 将它们显示为描述性块。您可能会看到其他人,如下所示。在这里,您可以看到从二进制 0 /0x00到 255 /的所有值0xFF(这是可以存储在单个字节中的最大值)。

    notepad++ 显示的从 0 到 255 的所有二进制值

    第 1、2 和 3 行显示的值通常称为“控制字符”,用于影响终端、光标位置等... aNUL的值为 0 / 0x00。BS控制字符是“ Backspace ”,指示应用程序删除一个字符并将光标向后移动一格。值得注意的是和之间的“缺失”或不可见字符......这里是“水平制表符”和“换行”字符 - 前者是相当不言自明的,后者将使文本流动到下一个线。BSVT

    在第 4 行和第 5 行,您可以看到整个可打印的 ASCII 字符集。空格 ( ) 的二进制值是 32 / 0x20,感叹号的值是 33 / 0x21,等等......第 5 行末尾的有趣方框是DEL控制字符 - 127 / 0x7F。

    包括 128 及以上的所有值要么是“扩展 ASCII ”,要么也是不可打印的,并且这些值从第 6 行开始显示为它们的原始值 - 例如:x80. 没有很好的方法来确定如何解释这些 - 一些 DOS 应用程序使用其中一些字符在终端上的“窗口”、框或区域周围生成框架。

    mc截图

    有关更多信息,请参阅 wiki 页面的“字符组”部分。

    在“十六进制编辑器”中查看与上述相同的文件,您通常会在 ASCII 表示旁边看到原始二进制值。

    十六进制编辑器


    当文件包含纯文本以外的数据时(例如:它是一个应用程序或其他二进制文件),您会看到很多非打印字符,因为它们从未用于人类消费......在此类文件中,数据以二进制形式排列,通常遵循严格的结构或格式。在某些情况下,数据表示大量数字(通过将多个字节连接在一起),在其他情况下,它们可能表示“机器代码”或直接呈现给处理器的原始指令。

    您可能能够在此类二进制文件中看到字符串,但这更多是“偶然”而不是故意 - 应用程序本身必须知道当您看到消息时要在屏幕上打印什么,这就是这样。

    字符串在二进制文件中编码的常见方法有两种。

    1.C字符串

    此格式使用 8 位字符,并以NUL字符结束字符串。该字符串在文件中立即可见,如下所示 - 请注意终止的NUL.

    C 字符串示例

    2. UTF-16

    此格式使用 16 位字符(即:连接的两个字节),并且可以表示Unicode描述的代码点的一部分。在这里,如果您在字符之间阅读,您会看到字符串有些可见NUL......这种格式在面向 Windows 的应用程序中非常常见。

    你能看到Logical Disks第二行的字符串吗?

    UTF-16 示例


    二进制文件还可以在其中存储其他资源——例如图像、声音、XML、JSON、档案等……如果需要,应用程序可以在运行时将资源提取到磁盘,或者通常可以直接从内存中处理它们。

    通常可以使用工具以自动化方式提取这些资源,但在某些情况下,该文件不是按照开放/通用标准设计的,因此需要一些手动干预。

    • 7
  2. LPChip
    2020-04-01T02:34:16+08:002020-04-01T02:34:16+08:00

    当你创建一个文件来存储数据时,你可以存储一系列字节。1 个字节是 0 到 255 之间的任意数字。在许多文件格式中,使用 0 到 255 之间的任意数字来存储数据就足够了。

    但是随着系统变得越来越复杂和先进,开发人员有时需要存储远大于 255 的数字。2 字节 = 256*256 = 65535,4 字节 = 256*256*256*256 = 4294967296。所以通过组合 4 个字节,可以存储从 0 到 4294967295 的值。

    您甚至可以将 8 个或更多字节组合成一个数字,这通常发生在需要 64 位(8x8 字节)的 64 位应用程序中。

    因为存储的数字通常很低,所以大部分字节都是 0,也就是 NUL。所以在一个文件中,你会看到很多 NUL,因为它们都是 64 位结构中的低值。

    为什么不优化文件?因为大多数程序员使用为他们存储数据的函数,并且他们牢记每一个场景,包括存储大数字。

    • 2
  3. Rémy
    2020-04-01T02:31:07+08:002020-04-01T02:31:07+08:00

    NUL这是一种非常流行的存储字符串的约定:通常程序会知道字符串开头的位置,并且会因为找到(或NULL或\0)字符而知道字符串已经结束。

    如果将其与 CSV 进行比较,您可以将其视为分隔每列的逗号。除了这里它是一个特殊字符,不能输入也不能打印,除了分隔字符串结尾没有其他用途。

    您可能认为这很脆弱,并且确实会导致无数安全问题。但是直到今天,许多字符串仍然以这种方式分隔。

    但是,在您的屏幕截图中,这可能具有不同的含义,具体到您正在使用的应用程序。总的来说,二进制数据不是用文本编辑器读取的:)

    • 1

相关问题

  • Word 手绘框

  • 升级到 python 3.7.3 后脚本不再运行

  • 从某些非 MS 应用程序粘贴到 MS Office 365 应用程序时格式丢失

  • MS Word – 如何在每页的右边缘插入一列

  • 如何在 Telerik 报告中使用重复表头在第二页的页眉和内容之间添加(垂直)边距(即填充)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve