BSTR

✍ dations ◷ 2025-06-07 04:35:28 #数据结构

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

相关

  • 吞噬作用吞噬作用(英语:phagocytosis,来自古希腊语φαγεῖν)亦称吞食、噬菌作用,是吞噬细胞和原生动物通过细胞膜从周围环境摄取固体颗粒,并在其内部形成吞噬体的过程。吞噬作用是细胞
  • 单纯疱疹单纯疱疹(Herpes Simplex,源自于希腊文“ἕρπης”,意为“潜伏”)是由单纯疱疹病毒Ⅰ型(HSV-1)和Ⅱ型(HSV-2)引起的病毒性疾病。通常可以根据病毒感染位置的不同,可以分为唇疱疹、
  • 冰淇淋冰淇淋(英语:ice cream),港澳惯称之为雪糕,马新、台湾惯称之为冰淇淋,冰淇淋、雪糕皆通行但有所区别,统称“冰淇淋、冰淇淋类”,是一种冷冻的甜品,通常以鲜奶油或奶油等乳制品为原料,
  • HBr溴化氢是化学式为HBr的二元化合物,标准情况下为气体。溴化氢溶于水得到氢溴酸,氢溴酸中加入失水剂也可得到溴化氢。标准情况下,溴化氢是不可燃气体,带有酸味,在潮湿空气中发烟。
  • 神经节细胞层神经节细胞层(神经节层)是视网膜的一层,由视网膜神经节细胞(英语:retinal ganglion cell)以及错位的无长突细胞组成。在黄斑中,这一层分有好几分层。这些细胞呈烧瓶形,其圆形的内侧
  • 国家人口和计划生育委员会1999年规定:印章直径5厘米,中央刊国徽,由国务院制发中华人民共和国国家人口和计划生育委员会(2003—2013,简称国家人口计生委),原称国家计划生育委员会(1981—2003,简称国家计生委),曾
  • 荣寿固伦公主荣寿固伦公主(1854年2月28日-1924年2月29日),俗称"大格格" ,是恭亲王奕䜣之女,道光帝与孝静成皇后的孙女,也是清代最后一位固伦公主和最后一位载入《清史稿》的公主。咸丰十一年,咸
  • 辛贝特以色列国家安全局(希伯来语:.mw-parser-output .script-hebrew,.mw-parser-output .script-Hebr{font-size:1.15em;font-family:"Ezra SIL","Ezra SIL SR","Keter Aram Tsova"
  • 西德尼·卓别林西德尼·卓别林(英语:Sydney Chaplin,1885年3月16日--1965年4月16日),英国演员,同时还是喜剧电影大师查理·卓别林同母异父的哥哥和经纪人。查理和第二任妻子丽泰·格雷的次子西
  • 李腊翁李腊翁(1928年12月5日-2017年3月18日),德昂族,云南省芒市人,中华人民共和国民间艺人,《达古达楞格莱标》国家级非物质文化遗产代表性传承人。1928年12月5日,生于芒市三台山乡出冬瓜