BSTR

✍ dations ◷ 2024-12-23 14:24:54 #数据结构

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

相关

  • 持续性正压呼吸器持续性正压呼吸器、持续性阳压呼吸器(英语:Continuous positive airway pressure,简称:CPAP)是一种在呼吸道施加压力(英语:positive airway pressure)的人工呼吸器(英语:Mechanical ve
  • 粘著语素规范语素(英语:Bound morpheme)又称不自由语素、黏着语素,在语言学中,指不能独立存在,必须附属于其他语素或词根的语素。 与此相对的是自由语素。 以英语为例,大多数词缀都是规范语
  • 法拉利法拉利(意大利语:Ferrari)是一家意大利跑车制造商,现在是世界第二大传统的专做跑车的厂牌,仅次于保时捷的地位。主要制造一级方程式赛车及高性能跑车,1939年由恩佐·法拉利于意大
  • 沃恩·威廉斯拉尔夫·沃恩·威廉斯,OM(英语:Ralph Vaughan Williams,1872年10月12日-1958年8月26日),英国作曲家。他亦是英国民歌的收集者。沃恩·威廉斯出生于格洛斯特郡的下安普尼(英语:Down Am
  • 焦念志焦念志(1962年12月-),山东潍坊人,中国生物海洋学家,厦门大学教授。1991年于青岛海洋大学获博士学位。2011年当选为中国科学院院士。
  • 顾应昌顾应昌(英语:Anthony Y. C. Koo,1918年11月22日-2011年6月6日),经济学家。1940年毕业于上海圣约翰大学,随后留学美国,1941年获得伊利诺伊大学硕士学位,1946年获得哈佛大学博士学位。1
  • 切达干酪切达干酪,原产自英国的西南部的切达(Cheddar)村,是英美最常见的干酪之一。传统的切达干酪呈鼓状,重27.5千克,外层包着一层绷带,以确保干酪的外层有良好的硬质外壳。切达干酪质地平
  • 阿尔贝托·J·阿曼多体育场阿尔贝托·J·阿曼多体育场(西班牙语:Estadio Alberto J. Armando;旧称:卡米洛·西切罗体育场)是一座位于阿根廷首都布宜诺斯艾利斯博卡的体育场。体育场看台一侧扁平而其余三侧
  • 九龙河 (黄泥河)九龙河,旧称喜旧溪,位于中国云南省东部,是黄泥河右岸支流,因传说九条黑龙和一条白龙争夺水源而得名。上游称篆长河,发源于富源县墨红镇者竹山,西南流经曲靖市麒麟区独木水库和东山
  • 冷阴极荧光灯管冷阴极荧光灯管(英文:Cold cathode fluorescent lamp,缩写:CCFL)是一种光源,使用高压电激发水银蒸汽产生紫外线,然后紫外线激发管内的荧光涂层以发出可见光。其原理和霓虹灯有相似