BSTR

✍ dations ◷ 2025-12-11 06:15:27 #数据结构

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

相关

  • 汉藏语系汉藏语系(英语:Sino-Tibetan languages),或称泛喜马拉雅语系、藏缅语系,是语言学家按照谱系分类法划分的一组语群,但是划分的形式很多。这个语系至少包含汉语族和藏缅语族,共计约40
  • 诱导偶极在非极性分子中正负电荷重心重合,不存在偶极,但在外电场:极性分子的永久偶极电场的影响下,非极性分子变成具有一定偶极的极性分子。这种在外电场力作用下产生的偶极称为诱导偶极
  • 卫满卫满(朝鲜语:위만/衛滿 Wi Man),是前2世纪时期卫满朝鲜的建立者。他是朝鲜历史上第一个有同时代史书明确记载的君主。《史记》只记载了他的名字——满,未记载其姓氏,在《汉书》中
  • 黎尚豪黎尚豪(1917年4月10日-1993年1月24日),广东梅县人,中国淡水藻类学家。1939年毕业于中山大学理学院生物系,获理学士学位。中国科学院水生生物研究所研究员。建立和发展了中国淡水实
  • 低地水牛低地水牛(学名:)属于牛科水牛属, 原产于印度尼西亚西里伯斯岛的原始低地森林。低地水牛是世界上最小的水牛之一,外观上似鹿,一般体长在180cm左右,高约85cm,尾长40cm,体重150kg-300kg
  • 二硫化钴二硫化钴是一种无机化合物,化学式为CoS2,具有黄铁矿结构。二硫化钴在120K以下具有铁磁性,高于此温度时有顺磁性。二硫化钴可由单质直接化合得到:以无水、无氧的甲苯为溶剂,氯化钴
  • 衰变加速因子n/an/an/an/an/an/an/an/an/an/a衰变加速因子(Decay-accelerating factor, DAF),亦称为CD55,在人体内是一种由CD55基因编码的膜蛋白,分子量为70kD。CD55可以通过间接抑制膜攻击复
  • 草原生态系草原生态系(英语:Grassland Ecosystem)位于内陆地区,地形平坦,常位于森林旁。雨量不多,大概是250~750毫米左右。几乎没有遮蔽物,动物不易躲藏。生产者是质地柔软的草本植物或较为矮
  • 垫紫草属垫紫草属()为紫草科中的属,有垫紫草(Chionocharis hookeri) 1种,分布于喜马拉雅,中国产于西南部及北部。是多年生高山垫状草本,叶紧密,扇状楔形;花单生于分枝的顶端,花萼5裂至近基部;花
  • 白鹿镇 (彭州市)白鹿镇,是中华人民共和国四川省成都市彭州市下辖的一个乡镇级行政单位。2019年12月,将通济镇思文场社区、官田村、姚家村、天生桥村、梓柏村、双杨村、涧安村所属行政区域划归