BSTR

✍ dations ◷ 2025-12-10 04:07:59 #数据结构

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

相关

  • 神经节神经节(英语:ganglion)在解剖学上是一个生物组织丛集,通常是神经细胞体的集合。在神经节内的细胞称为神经节细胞,虽然这一词有时会特别用来指视网膜神经节细胞。神经节是功能相同
  • 四夷四夷,是中国古代中原华夏部落对九州境内四方部落(夷人)的称呼。这个称呼最早起源于周代,是周王朝用来区分“王母弟甥舅(华夏)”部族和四方“非王母弟甥舅(夷狄)”部族的称呼。后
  • 切连科夫辐射契伦科夫辐射(英语:Cherenkov radiation)是介质中运动的电荷速度超过该介质中光速时发出的一种以短波长为主的电磁辐射,其特征是蓝色辉光。这种辐射是1934年由苏联物理学家帕维
  • 武士阶级政权武家政权指的是日本历史上从平安时代后期至江户时代,由武家栋梁(日语:武家の棟梁)(军事贵族(日语:軍事貴族))为首的、能够实效支配地方社会的武士阶级,即所谓的“武家”所掌握的中央政
  • 厄尔巴索艾尔帕索(西班牙语:El Paso)是美国德克萨斯州艾尔帕索县县治,位于德州极西部,隔格兰德河与墨西哥的华雷斯城相望。是该州第六大城、全国第十九大城市 (2006年估计人口为609,415)。
  • 曹彬 (医生)曹彬(1972年3月30日-),男,山东济南人。中国呼吸学科专家。现任中日友好医院副院长,呼吸与危重症医学科主任,兼呼吸与危重症医学科二部主任。1972年生于山东济南。1987年至1990年,在
  • 向叙利亚进发向叙利亚进发(法语:)是法兰西第二帝国非官方国歌,由奥坦丝·德·博阿尔内作曲,亚历山大·德·拉博德于1807年为其填词。这首歌的灵感来自拿破仑的埃及战役,它代表了法兰西第一帝国
  • 南宫适四配 颜回 · 孟子 · 曾参 · 孔伋日本 藤原惺窝 · 林罗山 · 室鸠巢 新井白石 · 雨森芳洲朝鲜 薛聪 · 权近 · 吉再 · 安珦 · 李穑 李滉 · 王仁 · 李
  • 九斤老太九斤老太,是鲁迅短篇小说《风波》中的人物。九斤老太爱说“一代不如一代”。以下是小说中的一句原文:“九斤老太自从庆祝了五十大寿以后,便渐渐的变了不平家,常说伊年青的时候,天
  • 京城大状师《京城大状师》,是一部拍摄于2000年的电视剧,于2000年首播。是张国立、宋研、毛乐、马春莲、朱媛媛、李嘉存等人主演,一共有25集。顺治年间,皇宫内出了一件奇案,先有总管太监死于