首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么BSON字符串(而不是Cstring/ename)后面的尾随0x00字节?

BSON字符串后面的尾随0x00字节是为了表示字符串的结束。BSON(Binary JSON)是一种二进制表示的JSON格式,用于在不同系统之间传输和存储数据。在BSON中,字符串的长度是固定的,因此需要使用0x00字节来标识字符串的结束位置。

尾随0x00字节的存在有以下几个原因:

  1. 标识字符串的结束:由于BSON中字符串的长度是固定的,因此需要使用特定的字符来标识字符串的结束位置。0x00字节被选择作为结束标志,因为它在大多数编码中被视为字符串的结束符。
  2. 方便处理:尾随0x00字节使得处理BSON字符串更加方便。通过检测0x00字节,可以快速确定字符串的结束位置,而无需遍历整个字符串。
  3. 兼容性:尾随0x00字节的设计使得BSON字符串与C语言中的Cstring(以null字节结尾的字符串)兼容。这样,在处理BSON字符串时,可以直接使用C语言的字符串处理函数,而无需进行额外的转换。

总结起来,BSON字符串后面的尾随0x00字节是为了标识字符串的结束位置,并且方便处理和与C语言的字符串兼容。在使用BSON格式进行数据传输和存储时,需要注意字符串的长度和尾随0x00字节的存在。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MongoDB从入门到实战之MongoDB快速入门

Bson可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是Bson是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想...,Bson有三个特点:轻量性、可遍历性、高效性, {“hello":"world"} 这是一个Bson的例子,其中"hello"是key name,它一般是cstring类型,字节表示是cstring:...:= (byte*) "/x00" ,其中*表示零个或多个byte字节,/x00表示结束符;后面的"world"是value值,它的类型一般是string,double,array,binarydata...ObjectId使用12字节的存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储24个十六进制数字组成的字符串,在这24个字符串中,前8位表示时间戳,接下来6位是一个机器码,接下来4位表示进程...尽管 BSON 格式为低位字节序,因此首先存储了最低有效位,但是mongod实例在所有平台上始终将time_t值先于ordinal值进行比较,无论字节序如何。

1.6K30

Postgresql源码(51)变长类型实现(valena.c)

总结(可以先跳过) varattrib_4b总结: 所有变长类型的判断 都 使用第一个字节0x00 (0bxxxx xxx0):is 4B(未压缩数据varattrib_4b,最大1G) 0x00...,匹配C++标准库,字符串操作函数一般都不需要自己写,用时先查询varlena.c text postgresql中经常可以看到text类型,直接调试时可以看到这样的结果: (gdb) p *t $6...这里char并不是字节的含义,头部的四个字节是按二进制位拆分使用的。...,1B断类型,最大126b) 0x00 (0b0000 0001):is 1B_E(TOAST专用) 4B头共32个二进制位,低2位存控制数据,长度保存在高30位中(注意len永远包含header的4字节...textin:调用cstring_to_text textout:调用text_to_cstring text * cstring_to_text(const char *s) { return cstring_to_text_with_len

63220
  • WinCE平台下BMP转JPG代码备份

    char strTimeFileName[20];//将当前时间转换成字符串---声明字符串长度的时候,要比实际长度多1,作为结尾符号 SYSTEMTIME sysTime; GetLocalTime...char strTimeFileName[20];//将当前时间转换成字符串---声明字符串长度的时候,要比实际长度多1,作为结尾符号 SYSTEMTIME sysTime; GetLocalTime...DWORD dwArrayLength,//字节数组的长度 IStream **ppOutIStream//传出的由字节转换的流 ); /* *函数介绍:根据编码器类型名称,得到指定的编码器...生成一个8K的文件 //继续解码后面的部分 if (E_PENDING == hr) { Sleep(500); } //失败 else if (FAILED(hr...DWORD dwArrayLength,//字节数组的长度 IStream **ppOutIStream//传出的由字节转换的流 ) { try { HRESULT hrRet =

    4.1K20

    MongoDB 学习笔记: BSON 结构分析

    BSON 会存储 Value 的类型,相比于明文存储,不需要进行字符串类型到其他类型的转换操作。...以整型 12345678 为例,JSON 需要将字符串转成整型, BSON 中存储了整型类型标志,并用 4 个字节直接存储了整型值。...比如下面的例子 {"b" : NumberInt(1)} 的存储长度为 12 字节。图片数组类型数组类型头部有 4 个字节存储长度,每个元素都对应有下标,从 '0' 开始递增。...但是事实并非如此,从前面的描述可以看到,每个 KV 是顺序紧凑排列的,如果增加、删除或者修改了某个字段,要生成新 BSON 文档。...除了通过 BSONObjBuilder 流式生成 BSON 文档外,MongoDB 代码中也提供了 DOM 接口用于修改或者增删某个字段,但是修改完成还是会生成新的 BSON

    8.3K171

    MongoDB从入门到实战之MongoDB简介

    Bson可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是Bson是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想...,Bson有三个特点:轻量性、可遍历性、高效性, {“hello":"world"} 这是一个Bson的例子,其中"hello"是key name,它一般是cstring类型,字节表示是cstring:...:= (byte*) "/x00" ,其中*表示零个或多个byte字节,/x00表示结束符;后面的"world"是value值,它的类型一般是string,double,array,binarydata...MongoDB业务应用场景 四高场景应对: 传统的关系型数据库(如MySQL,MS SQL Server),在数据操作的四高需求以及应对Web2.0的网站需求面前显得力不从心,MongoDB可更好的应对四高需求...这些应用场景中,数据操作方面的共同特点是: 对于下面的这些数据,我们更适合使用 MongoDB来实现数据的存储: 数据量大。 读写操作频繁。 价值较低的数据,对事务性要求不高。

    97440

    从JSON进化到BSON

    2.操作更简易   对json来说,数据存储是无类型的,比如你要修改基本一个值,从9到10,由于从一个字符变成了两个,所以可能其后面的所有内容都需要往后移一位才可以。   ...bson在其基础上增加了“byte array”数据类型。这使得二进制的存储不再需要先base64转换再存成json,大大减少了计算开销和数据大小。   ...当然,在有的时候,bson相对json来说也并没有空间上的优势,比如对{“field”:7},在json的存储上7只使用了一个字节如果用bson,那就是至少4个字节(32位)   目前在10gen的努力下...总上所述: 数据结构:   json是像字符串一样存储的,bson是按结构存储的(像数组 或者说struct) 存储空间   bson>json 操作速度   bson>json。...比如,遍历查找:json需要扫字符串bson可以直接定位 修改:   json也要大动大移,bson就不需要。

    2.3K40

    MongoDB基础之BSON数据类型

    通常,在序列化和反序列化BSON时,每种编程语言的驱动程序都会从语言的字符串格式转换为UTF-8。可以轻松地将大多数国际字符存储在BSON字符串中。...前9个字节保证了同一秒不同机器不同进程产生的ObjectId是唯一的,3字节就是一个自动增加的计数器,保证了相同进程同一秒产生的ObjectId也是不一样的。...在JavaScript中,Date对象用做MongoDB的日期类型,创建一个新的Date对象时,调用new Date()不是Date()。...调用Date()实际上会返回对日期的字符串表示,不是真正的Date对象。这不是MongoDB的特性,而是JavaScript本身的特性。...然后,按BSON的一字节子类型进行比较。 最后,根据数据执行逐字节比较。

    9.2K30

    MongoDB基础之BSON数据类型

    通常,在序列化和反序列化BSON时,每种编程语言的驱动程序都会从语言的字符串格式转换为UTF-8。可以轻松地将大多数国际字符存储在BSON字符串中。...前9个字节保证了同一秒不同机器不同进程产生的ObjectId是唯一的,3字节就是一个自动增加的计数器,保证了相同进程同一秒产生的ObjectId也是不一样的。...在JavaScript中,Date对象用做MongoDB的日期类型,创建一个新的Date对象时,调用new Date()不是Date()。...调用Date()实际上会返回对日期的字符串表示,不是真正的Date对象。这不是MongoDB的特性,而是JavaScript本身的特性。...然后,按BSON的一字节子类型进行比较。 最后,根据数据执行逐字节比较。

    4.2K10

    MySQL中BINARY和VARBINARY类型学习--MySql语法

    也就是说,它们包含字节字符串不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。...BINARY和VARBINARY允许的最大长度一样,如同CHAR和VARCHAR,不同的是BINARY和VARBINARY的长度是字节长度不是字符长度。...对于一种类型,BINARY属性不会将列视为二进制字符串列。相反,它致使使用列字符集的二元 校对规则,并且列自身包含非二进制字符字符串不是二进制字节字符串。...这不同于BINARY(5),它保存5字节二进制字符串,没有字符集或 校对规则。 当保存BINARY值时,在它们右边填充值以达到指定长度。填充值是0x00(零字节)。...下面的例子说明了用0x00填充的BINARY值如何影响列值比较: mysql> CREATE TABLE t (c BINARY(3)); Query OK, 0 rows affected (0.01

    3.5K40

    SQL函数 CHARACTER_LENGTH

    描述 CHARACTER_LENGTH返回一个整数值,表示指定表达式中的字符数,不是字节数。表达式可以是字符串,也可以是任何其他数据类型,如数字或数据流字段。...返回的整数计数包括前导和尾随空格以及字符串终止字符。如果传递NULL值,则CHARACTER_LENGTH返回NULL,如果传递空字符串(‘’)值,则返回0。...在下面的示例中,第一个CHARACTER_LENGTH返回1(因为数字分析删除了前导和尾随零),第二个CHARACTER_LENGTH返回8。...LENGTH与这些函数的不同之处在于,在计算字符之前会去掉尾随空格和字符串终止字符。 $LENGTH也不同于这些函数,因为如果传入一个NULL值,它返回0,如果传入一个空字符串,则返回0。...示例 下面的示例返回Sample中状态缩写字段(Home_State)中的字符数。 员工表。

    60430

    浅谈C中的wprintf和宽字符显示

    带着几分怀疑,我修改了上面的程序,编译运行,居然真的就没问题了   #include    <   cstdio   >    #include    <   cstdlib   >    #include...为什么原来的程序会出问题?“-N"这个字符串是怎么冒出来的?为什么作者在windows下的程序就不存在该问题?  这么多的疑惑堵在心口,我哪能心安呢。知其然还要知其所以然嘛!...,尽管它们并不是一回事),独立于当前使用的locale;因此在上面的输出中,我们看到每个Unicode码值用 32bit表示,不是16bit。  ...)看待,%s则意味着对应的参数会被当作普通字符串(multi-byte string)看待。  ...这里用了%s, printf 就会将对应的参数wstr视为普通字符串(尽管我们清楚他是个wcs不是mbs);另一方面,我们已经看到了wstr[ ]的内存布局,其前3 byte为 0x2d ,0x4e,

    1K20

    CString 和 char* 类型转化

    因为 MFC 的设计者们在设计 CString 数据类型时非常小心, CString 类型表达式求值指向了字符串,所以这里看不到任何象 Format 或 sprintf 中的强制类型转换,你仍然可以得到正确的行为...在 CString 中与之意义相等的表示法: LPTSTR p = s.GetBuffer(1024);   调用这个函数,你不仅获得了字符串缓冲区的指针,而且同时还获得了长度至少为 1024 个字符的空间...(注意,我说的是“字符”,不是字节”,因为 CString 是以隐含方式感知 Unicode 的)。   ...所以 GetBuffer 本来返回的是指向这个临时对象中字符串的地址的指针,但是当这个临时对象被析构,这块内存就被释放了。...我们假设它指的是以字节为单位计算,你需要对你的代码做一些修改来计算这个字符串所含有的字节大小。 参考推荐: CString(百度百科) CString 型和 char* 类型的相互转化

    6.5K20

    【原创】ObjectARX 多版本自适应字符集操作

    规定运行时库必须支持UNICODE和ANSI(多字节字符串和字符,所以WINDOWS运行时库也是支持多字节和宽字符编码操作的两套接口的。...最典型的是 多字节接口:strlen,strcat,strcmp等,对应的宽字符接口:wcslen,wcscat,wcscmp等。 有了上面的基础,我们开始说到主题。...由于ARX环境是需要支持多个版本,字符操作在ARX中是非常常见的,所以很近切的需要能解决既能在多字节环境编译又能在宽字符环境编译的代码。...定义,我们关心的就是正确的给变量赋值了,在运行时库中,提供一个方法,当在某个字符串常量前加上大写L,则通知编译器,该字符串作为UNICODE字符串来编译,所以在TCHAR.H中也利用了这一点,来定义了随环境变化的通知编译器字符编码的机制...而且还需要说明的一点,MFC中的CString是随环境自适应的字符集,所以建义大家在编程过程中,尽量使用CString不是std::string。

    27520

    003.MongoDB主要概念

    文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。 MongoDB区分类型和大小写。 MongoDB的文档不能有重复的键。 文档的键是字符串。...由于 Capped collection 是按照文档的插入顺序不是使用索引确定插入位置,这样的话可以提高增添数据的效率。...8 个小时 接下来的 3 个字节是机器标识码 紧接的两个字节由进程 id 组成 PID 最后三个字节是随机数 ?...BSON 字符串都是 UTF-8 编码。...这个字段中的值使用BSON时间戳表示了操作时间。 提示:BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,可以使用 BSON 日期类型。

    1.3K30

    MongoDB数据库基础教程(二) - 数据结构类型详解

    文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档) MongoDB区分类型和大小写 MongoDB的文档不能有重复的键 文档的键是字符串。...以下划线"_"开头的键是保留的(不是严格要求的)。 集合 集合就是 MongoDB 文档组,类似于 RDBMS 中的表格。...由于 Capped collection 是按照文档的插入顺序不是使用索引确定插入位置,这样的话可以提高增添数据的效率。...接下来的 3 个字节是机器标识码 紧接的两个字节由进程 id 组成 PID 最后三个字节是随机数 MongoDB 中存储的文档必须有一个 _id 键。...newObject.str 5a1919e63df83ce79df8b38f 字符串 BSON 字符串都是 UTF-8 编码。

    1K41
    领券