BSTR

✍ dations ◷ 2025-07-08 17:33:38 #数据结构

BSTR(Basic String)是一种Pascal-Style字符串(明确标示字符串长度)和C-Style字符串(以\0结尾)的混合物,一般用于COM中,是Unicode字符串,即标示字符串长度,最后还有一个值为\0字节。

对于BSTR,NULL与""有相同的语义(Visual Basic引入的语义)。BSTR的长度不包含结尾的\0字节。BSTR必须用SysAlloc*操作系统API申请与释放。

C程序语言本身原并不支持字符串数据结构。字符串通常以一个字符数组(或称数组)或一个指向字符数据的指针来表达。由于C语言的数组不包含其长度的信息,故亦无法表示所载之字符串之长度。C语言社群对此通用之解决方案为于字符串末端增添一数值0的字符。C语言的标准程序库中的字符串处理功能亦以此为基础。C-Style 字符串特点为不直接包含长度信息。要获取字符串之长度,就必须从头到尾数算字符数目,直到遇到字符0为止。由于不设长度信息,故C-style 字符串的长度理论上可以无上限。

Pascal程序语言采取另一种方向处理字符串。在存储字符串的记忆空间的开首,存储一固定长度整数以表达其长度。如此Pascal-style 字符串不需要在最后增添额外字符以标明其结束。但由于字符串开首存储字符串长度的空间有限,故Pascal-style 的字符串长度有上限。但在获得字符串长度方面有速度优势。

BSTR 字符串结合了C-style 字符串和Pascal-style字符串。它在前4字节存储了字符串长度(字符串的字节数,但不包括Null结束符),在字符串结尾以字符0识别。和pascal-style 字符串不同,指向BSTR字符串的指针指向第一个字符,而非开首的字符串长度。故此适用于读取C-style 字符串的程序库同样适用于BSTR字符串(但写入则另作别论)。 字符是按照Unicode编码保存。允许在BSTR串中间嵌入NULL字符。

Windows提供了BSTR相关函数:

相关

  • 美国肾脏学会期刊美国肾脏学会期刊(Journal of the American Society of Nephrology)为属于同行评审且涵盖所有肾脏学的医学期刊。 它成立于1966年,由美国肾脏学会(英语:American Society of Neph
  • 白垩纪-第三纪大灭绝事件白垩纪-古近纪灭绝事件(简称K-Pg事件、K-Pg灭绝),旧称为白垩纪﹣第三纪灭绝事件(简称K-T事件、K-T灭绝),俗称恐龙大灭绝,是地球历史上的第五次以及最后一次大规模物种灭绝事件、也是
  • 蒸气量蒸气量(英语:vapor quality)也称为蒸气干度,是一热力学的性质,可量化描述蒸气可产生机械能的能力,流体中的蒸气量定义为蒸气质量占总质量的比例。饱和蒸气的蒸气量为100%,饱和液体
  • 大清宝钞大清宝钞,是清朝咸丰三年(1853年)由清朝官方发行的纸币。以制钱为单位,面额从250文到50千文、100千文不等。上端有“大清宝钞”汉文,中间印着制钱文数,花纹字画用蓝色印刷。同时发
  • 礼讼礼讼(韩语:예송)即礼讼论争(예송논쟁),指的是朝鲜王朝历史上礼仪相关的论争。朝鲜王朝历史上曾发生先后过两次礼讼,每一次礼讼都成为朋党斗争的工具。第一次礼讼是发生在1659年的己
  • 官方政府是一个政治体系,于某个区域订立、执行法律和管理的一套机构。广义的政府包括立法机关、行政机关、司法机关、军事机关,狭义的政府仅指行政机关;在内阁制国家,“政府”一词也
  • 新城病新城病(英文:Newcastle disease)是一种禽鸟传染病,由新城病病毒引致。此病毒在禽鸟间有很高的传染性和死亡率,现时没有治疗方法,但可以透过疫苗和消毒措施以减少其爆发之可能性。
  • 艾萨克·海耶斯艾萨克·李·海耶斯二世(1942年8月20日-2008年8月10日)是一位美国作曲家、音乐家、歌手和演员。他为《南方公园》中的角色大厨配音。他也是一名山达基(科学教)教徒。
  • 南部健一南部健一(Nanbu Kenichi、1943年2月22日-),日本力学家、等离子体物理学家,东北大学荣誉教授(退休),工学博士。主要研究方向是层流,湍流,稀薄气体和等离子体模拟。1980年首先发现了困扰
  • 安娜塔西亚 (消歧义)安娜塔西亚(Anastasia)可能指: