BSTR

✍ dations ◷ 2025-10-22 21:22:29 #数据结构

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

相关

  • 派翠克·J·肯尼迪帕特里克·约瑟夫·肯尼迪二世(Patrick Joseph Kennedy II;1967年7月14日-)是美国的一位政治人物。在1995年至2011年期间,他曾经是罗德岛州第一选举区选出的美国众议院议员。他的
  • 二聚体二聚体(Dimer)或称双体、二聚物在不同领域中有不同意义,但基本涵义都表示相同或同一种类的物质,以成双的型态出现,可能具有单一状态时没有的性质或功能。化学上,凡是两个分子结合
  • 室建陀室建陀(梵语:स्कन्द,拉丁字母转写:Skanda),又称塞建陀、鸠摩罗(意译童子)、迦
  • 八面体在几何学中,八面体是指由八个面组成的多面体,而由八个全等的正三角形组成的八面体称为正八面体。其中正八面体是八面体中顶点和边数最少的多面体,一些八面体可能有超过12个顶点
  • 扁头豹猫扁头猫(学名:Prionailurus planiceps),是一种体型较小的野外猫科动物,分布在泰国南部、马来西亚、文莱及印尼的森林。它们因失去栖息地及污染而濒危。只有两只扁头猫受到饲养,都是
  • 马康基氏琼脂马康基氏琼脂(英文:MacConkey Agar)为一种细菌繁殖营养成分,但只对革兰氏阴性菌有效,而且由于它的特殊成分(NEUTRAL RED指示剂),可以辨别会利用乳糖发酵和无法利用乳糖发酵的细菌
  • 潘奕如潘奕如(1978年3月19日-),台湾女演员,毕业于台北艺术大学戏剧系,主修表演。2018年以《清风无痕》入围第53届金钟奖最佳女配角。 2014 udn talks联合大讲堂【潘奕如:面对恐惧的终极法
  • 明道加斯二世明道加斯二世(Mindaugas II.,1864年3月3日-1928年3月24日),即乌拉赫的威廉(德语:Wilhelm (II.) von Urach,立陶宛语:Vilhelmas fon Urachas),全名威廉·卡尔·弗罗雷斯坦·格罗·克莱申
  • 春城 (朝鲜人)Template:佛敎春城(1891年3月30日-1977年8月22日)本贯平昌李氏出身,朝鲜王朝后期及韩国僧侣和作家。他在现代韩国著名僧侣和韩国社会的荒谬是辱说的讽刺。俗姓李氏,本名昌林,法名
  • 约瑟夫·兰纳约瑟夫·弗兰茨·卡尔·兰纳(德语:Josef Franz Karl Lanner,1801年4月12日-1843年4月14日),著名奥地利作曲家。兰纳是第一位把圆舞曲从简单的乡间舞曲改良到上层社会所喜欢曲式的