BSTR

✍ dations ◷ 2025-11-17 21:10:29 #数据结构

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

相关

  • 免疫遗传学免疫遗传学(英语:Immunogenetics 或 Immungenetics)是一个生物学分支,研究免疫系统和遗传之间的关系。
  • 丕平王朝加洛林王朝(法语:les Carolingiens,旧称Carlovingiens,中世纪拉丁语:Karolingi,又译卡洛林王朝)是自公元751年后统治法兰克王国的王朝。在此之前,其王朝成员以“宫相”的身份涉理王
  • 俄亥俄河俄亥俄河(英语:Ohio River)是美国东部的一条河流,是密西西比河最东的支流。发源于匹兹堡,初向西北流,在宾夕法尼亚州、西维吉尼亚州和俄亥俄州的边界以下转向西南方,并流经肯塔基州
  • 瓦吉特在埃及神话中,瓦吉特(埃及语:w3ḏyt;Wadjet亦作Wadjit、Wedjet、Uadjet或Ua Zit,希腊语:Udjo、Uto、Edjo或Buto等;中文则有乌加特、瓦杰特等译法)原本是德普当地的古代女神,德普即后
  • 安平港安平港(闽南语:.mw-parser-output .sans-serif{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Lato,"Helvetica Neue",Helvetica,Arial,sans-serif} An-p
  • 4G第四代移动通信技术(英语:The fourth generation of mobile phone mobile communication technology standards,缩写为4G),是3G之后的延伸。从技术标准的角度看,按照ITU的定义,静态
  • 直属特设机构国务院直属特设机构,即直接隶属于中华人民共和国国务院的直属特设机构。根据中央机构编制委员会办公室给出的的定义,直属特设机构是指政府为了管理某类特殊的事项或履行特殊的
  • 孔迪亚瓦-根博格尔县坐标:6°01′S 144°58′E / 6.017°S 144.967°E / -6.017; 144.967孔迪亚瓦-根博格尔县(英语:Kundiawa-Gembogl District),是巴布亚新几内亚的县份之一,位于新几内亚岛中部,由钦
  • 孟瑞孟瑞(英文:Oscar Meng,1988年12月26日-),朝鲜族,中国演员。毕业于北京电影学院表演系。多年来出演过多部电视剧及电影。2016年出演网络剧《不可抗力》谢炎一角后,逐渐为人熟悉。
  • 循环论 (形而上学)循环论为一种认事物变化仅存在量变,而否定质变的形而上学理论。这种理论不承认事物的前进和发展,现今多半予以否定。