BSTR

✍ dations ◷ 2025-07-07 08:54:12 #数据结构

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

相关

  • 中世纪饮食中世纪饮食文化泛指欧洲中世纪(从5世纪到16世纪)的饮食习惯、烹调方法和餐桌礼仪,这套饮食文化跨越近千年,涵盖严寒的北欧和酷热的地中海,屡经转变和更替,成为今日欧洲菜系的基础
  • 伤寒杂病论《伤寒杂病论》,又作《伤寒卒病论》,为东汉张仲景所著,是中国第一部理法方药皆备、理论联系实际的中医临床著作。此书被认为是汉医学之内科学经典,奠定了中医学的基础。在四库全
  • 希尔伯特空间在数学里,希尔伯特空间(英语:Hilbert space)即完备的内积空间,也就是说一个带有内积的完备向量空间。希尔伯特空间是有限维欧几里得空间的一个推广,使之不局限于实数的情形和有限
  • 几内亚湾坐标:1°0′N 4°0′E / 1.000°N 4.000°E / 1.000; 4.000几内亚湾(英语:Gulf of Guinea;法语:Golfe de Guinée)位于非洲西岸,它包括贝宁湾和邦尼湾,是大西洋的一部分。赤道与本初
  • 中央气象局台风警报中央气象局台风警报是由交通部中央气象局所发布的台风警报,是中华民国政府针对台风侵袭台湾地区时所发布的警报,分为海上台风警报与陆上台风警报。中华民国的气象单位受到许多
  • 视频网站视频分享网站是指在互联网上免费提供有声视频(视频)的服务。初期旨在分享自拍短片,随着用户要求提高,视频限制放宽,部分视频共享网站会使用P2P技术。自1999年起,宽带普及化,视频共
  • 不伦瑞克大教堂坐标:52°15′51″N 10°31′27″E / 52.26417°N 10.52417°E / 52.26417; 10.52417不伦瑞克大教堂(德语:Dom St. Blasii)是位于德国城市不伦瑞克的一座信义宗教堂。不伦瑞克大
  • 让-巴蒂斯特·夏古让-巴蒂斯特·夏古(法语:Jean-Baptiste Charcot,1867年7月15日-1936年9月16日)是法国科学家、医学博士及极地科学家。其父为神经科医生让-马丁·沙可。1867年7月15日,夏古生于法国
  • 今文经今文经,乃指以汉代隶书文字所写的儒家经书。秦始皇焚书坑儒后,《六经》散落失轶。西汉初年,有秦朝遗儒伏生等人凭借记忆口授《五经》,以汉隶写成,故曰今文经,后延伸出了今文经学。
  • 遗产战争 西班牙帝国 遗产战争又名遗产继承战争(法语:Guerre de Dévolution;西班牙语:Guerra de Devolución),是1667年至1668年间法兰西王国与西班牙帝国之间的一场战争。战争由西班牙国