BSTR

✍ dations ◷ 2025-11-07 18:24:21 #数据结构

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

相关

  • 赖氨酸赖氨酸(英语:Lysine,简称为Lys或者K)是一种α-氨基酸。它的化学式表示为:HO2CCH(NH2)(CH2)4NH2。赖氨酸是一种人体必需的氨基酸。赖氨酸的遗传密码是AAA和AAG。赖氨酸与精氨酸,组
  • 卡尔·冯·弗里希卡尔·冯·弗里希骑士(Karl Ritter von Frisch,1886年11月20日-1982年6月12日),奥地利动物行为学家,1973年与康拉德·洛伦兹、尼可拉斯·庭伯根共同获得了1973年诺贝尔生理学或医
  • 核桃核桃(walnut)是胡桃属植物的核果。但在植物学上,核桃是胡桃属植物核果中的种子,不属于坚果。核桃可食用(英语:List of edible seeds),最常见的是普通胡桃的坚果,而黑核桃(英语:Juglans
  • 佐治亚引导石阴谋论坐标:34°13′55″N 82°53′40″W / 34.231984°N 82.894506°W / 34.231984; -82.894506佐治亚引导石(英语:The Georgia Guidestones),亦称“乔治亚巨石阵”或“美国巨石阵”(Am
  • 闭锁综合征闭锁综合征(Locked-in syndrome)是指患者虽然意识清醒,但却由于全身随意肌(除眼睛外)全部瘫痪,导致患者不能活动、不能自主说话的一种综合征。如果患者眼睛也瘫痪,则被称为完全性闭
  • 对流抑制能对流抑制能 (Convective inhibition, CIN or CINH) 是气象学名词,其意义为阻止气块自地面上升至自由对流高度的能量大小。地面气块需要突破负浮力区所造成的对流抑制能,才能
  • 重排反应重排反应(Rearrangement reaction)是分子的碳骨架发生重排生成结构异构体的化学反应,是有机反应中的一大类。重排反应通常涉及取代基由一个原子转移到同一个分子中的另一个原子
  • 柴广敬柴广敬(1377年-1406年),名钦,以字行,浙江余姚人。明朝翰林。永乐二年(1404年),柴广敬中式甲申科二甲第四十四名进士,选翰林院庶吉士,编撰永乐大典,分修礼、乐、音韵等书。永乐四年(1406年
  • 长孙皇后长孙皇后(601年3月15日-636年7月28日),河南郡洛阳县(河南省洛阳市东)人,中国唐朝唐太宗李世民皇后。唐朝第一个在位皇后,去世后谥号为“文德皇后”。长孙皇后的父亲长孙晟是隋右骁卫
  • 石家庄外国语学校石家庄第二外国语学校石家庄市第四十三中学石家庄外国语学校,原名石家庄市第43中学,创建于1994年,是中国河北省石家庄市的一所重点中学。学校由幼儿园、小学、初中、高中四部组