BSTR

✍ dations ◷ 2025-07-01 00:43:25 #数据结构

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

相关

  • 家畜家畜一般是指由人类饲养驯化,且可以人为控制其繁殖的动物,一般用于食用、劳役、毛皮、宠物、实验等功能。另一种较狭义的家畜,是指相对于鸟类动物的家禽而言的哺乳类动物,亦即将
  • 头皮头皮(英文:Scalp)是指头颅上方及后方,从皮肤一直到骨膜的部分,位在脸部的后方及两侧,颈部上方的区域。头皮通常分为五层,而五层的首字母恰好是头皮的英文SCALP,以方便记忆。头皮的
  • 皇徽英国皇家徽章,即是英王徽,盾面上两组三只金狮象征英格兰,红狮象征苏格兰,竖琴象征北爱尔兰。两侧是代表英格兰的狮子和代表苏格兰的独角兽。盾徽周围的圈饰用古法语写着Honi soi
  • 吟松阁吟松阁是台湾台北市北投区的一座建筑。吟松阁兴建于1934年,是日式木造旅馆,建筑及庭院拥有浓郁的日式特征,被视为北投温泉景观的重要构成部分。吟松阁长期作为一座私营温泉旅馆
  • 外国佣兵黑森佣兵(英语:Hessian、Hessian soldiers,德语:Soldatenhandel unter Landgraf Friedrich II. von Hessen-Kassel),即黑森士兵,又译赫斯佣兵,18世纪受大英帝国雇用的德意志籍佣兵组
  • 有效场论在物理学上,有效场论就跟其它有效理论一样是一个近似的理论(通常是量子场论)。它包含了描述某一尺度的现象所需要的自由度,并且忽略更小结构中尺度更小的自由度(等价于更高的能量
  • 门廊圣母堂 (那不勒斯)门廊圣母堂(Chiesa di Santa Maria in Portico)是一座罗马天主教教堂,巴洛克建筑,位于意大利那不勒斯市中心,同名街道的尽头,紧邻基艾亚滨海路。最初的建筑师是尼古拉·隆戈(1632年
  • 内博伊沙·拉德马诺维奇内博伊沙·拉德马诺维奇(Nebojša Radmanović) (Небојша Радмановић; 1949年10月1日-) 波黑联邦塞族政治家。在巴尼亚卢卡完成他的教育,而后继续在贝尔格莱德
  • 巴尔布斯 (加的斯)加的斯的巴尔布斯(英语:Balbus)。约活动于公元前1世纪前后。古罗马政治家之一,来自加的斯。公元前72年借助庞培势力获得罗马公民权,使用罗马名字,移居罗马并发挥非常重要的作用。
  • 三仁汤三仁汤,一方出自清朝的《温病条辨》,是祛湿剂中清热祛湿的方剂,有宣畅气机,清热利湿的功效,可以主治湿重于热之湿温病。可见的症状有:头痛恶痛,身重疼痛,胸闷不饥,午后身热,面色淡黄,舌