BSTR

✍ dations ◷ 2025-08-13 19:42:36 #数据结构

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相关函数:

相关

  • 宗教致幻剂宗教致幻剂(英语:entheogen)是指在宗教、巫觋宗敎或者精神领域使用的精神药品。 “entheogen”一词最早在1979年作为一个中性词语提出。服用宗教致幻剂可能会使服用者感觉与神
  • 平均自由程气体分子的平均自由程(英语:mean free path)指气体分子两次碰撞之间的时间内经过的路程的统计平均值,一般用 λ
  • 大力神大力神火箭是美国研发的一次性使用运载火箭,前身为LGM-25太阳神洲际弹道导弹,共发射368次(1959年至2005年),包含于1960年代中期的双子星载人计划。大力神火箭至1980年代晚期持续
  • 负鼠目 Didelphimorphia负鼠目(学名:Didelphimorphia)是脊索动物门哺乳纲的一目,属于美洲有袋总目,目前仅包含负鼠科一科,大部分生活在南美洲,只有北美负鼠生活在北美洲。
  • 腹股沟腹股沟、鼠蹊或鼠蹊部(拉丁语:regio inguinalis),是指人体腹部连接腿部交界处的凹沟,其附近区域称为腹股沟;位于大腿内侧生殖器两旁,在人体解剖学上属于腹部。腹股沟部有深、浅的淋
  • 肌动蛋白结合蛋白肌动蛋白结合蛋白(英语:actin-binding proteins,缩写作ABP)是指能与肌动蛋白的单体、多聚体(或两者皆可)结合的蛋白质。α-辅肌动蛋白、β-血影蛋白、抗肌萎缩蛋白(英语:dystrophin
  • 高氯酸钠201g/100cm3(20°C)329g/100cm3(100°C)高氯酸钠是高氯酸的钠盐,化学式为NaClO4。它是无色晶体,具潮解性,可溶于水和乙醇,480°C时分解,生成热为-382.75kJ/mol。通常以菱方晶系的
  • 格雷格·巴拉德格雷戈里·巴拉德(英语:Gregory Ballard,1955年1月29日-2016年11月9日),美国NBA联盟前职业篮球运动员。他在1977年的NBA选秀中第1轮第4顺位被华盛顿子弹选中。美国时间2016年11月9
  • 日本芜菁日本芜菁(水菜),为十字花科芸薹属的草本植物,芸薹的变种。
  • 白相思树白相思树(学名:)又称相思树、微白金合欢,是一种豆科植物,原产于非洲与中东地区。