BSTR

✍ dations ◷ 2025-11-28 21:58: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相关函数:

相关

  • 乍得沙赫人乍得沙赫人(Sahelanthropus tchadensis),又名乍得人猿,是一种只有化石的猿,相信是生存于700万年前(7Ma)。它被称为最古老的人属祖先,是人类及黑猩猩的最近共同祖先。它是属于中新
  • 奶粉奶粉、乳粉主要是指以牛的乳汁为原料,经过消毒、脱脂、脱水、干燥等工艺制成的粉末。也可指为使用山羊等其他动物的乳汁生产的产品。 奶粉为再加工品,而非原态食物。奶粉按生
  • 美国城市列表 (按人口排列)本列表列出美国人口最多的建制区。根据美国人口调查局的定义,建制区可以有多种形式,包括市、镇、村和自治市镇。这些名称及其用法各州皆有很大区别。美国最大的建制区多数是在
  • 硒酸钠硒酸钠(Sodium selenate)是具有化学式Na2SeO4的无机化合物,区分于亚硒酸钠。 它以无水盐、七水合物和十水合物的形式存在。 它们都是白色水溶性固体。十水合物是混合维生素补
  • 巴勒维穆罕默德-礼萨沙·巴列维(波斯语:محمد رضا شاه پهلوی‎;1919年10月26日-1980年7月27日)是伊朗的沙阿,1941年9月16日即位,1979年2月11日被伊朗伊斯兰革命推翻。他是
  • 朝鲜葱饼朝鲜葱饼(韩语:파전)是一种朝鲜饼食,主要材料有面粉 (밀가루)(庆尚道是朝鲜的小麦主产地)、鸡蛋 (계란) 和葱 (파) ,常加入海产(해물),成为有名的海鲜葱饼(韩语:해물파전、又称为海鲜
  • 马克-安东尼·夏庞蒂埃马克·安东尼·夏庞蒂埃(法语:Marc-Antoine Charpentier,1643年-1704年2月24日),法国作曲家。尽管夏庞蒂埃没有在路易十四的宫廷中担任职务,但他的才华使他在巴黎的音乐界中占有重
  • 离巢之歌巣立ちの歌(すだちのうた)(离巢之歌)是由村野四郎、岩河三郎作曲的合唱曲。制作于1965年。在1991年《旅立ちの日に》(启程之日)创作出来之前,与《赠る言叶》(赠言)和《仰げば尊し》(景
  • 剃毛剃毛,主要指用剃刀剃去人的毛发等的行为。由于剃毛只能剃去表皮以上的毛发,因此毛发会于短期内长出来,因此剃毛的效果不太好。
  • 施奈德山 (坦海姆山脉)坐标:47°29′35″N 10°38′41″E / 47.49306°N 10.64472°E / 47.49306; 10.64472施奈德山(德语:Schneid),是奥地利的山峰,位于该国西部,由蒂罗尔州负责管辖,属于阿尔高阿尔卑斯