BSTR

✍ dations ◷ 2025-11-14 20:37:41 #数据结构

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

相关

  • 婴儿食品婴儿食品指专门制造给0岁到3岁间儿童食用的食品,较软同时有特殊营养符合婴儿需求。世界卫生组织提出一项全球性的公共卫生建议,建议婴儿前六个月应该完全母乳喂养,以达到最佳的
  • 治疗性超声波治疗性超声波通常指的是用于治疗用途的超声波。包括高强度聚焦超声、碎石术、超声波给药、超声波止血、癌症治疗以及协助血栓溶解。治疗性超声波在某些领域的有效性还存在争
  • 南岛民族南岛民族指大洋洲和东南亚以南岛语系为语言的族群。其中包括东帝汶、印度尼西亚、马来西亚、菲律宾、文莱、马达加斯加、密克罗尼西亚联邦、夏威夷和波利尼西亚以及台湾原住
  • 表皮生长因子受体1IVO, 1M14, 1M17, 1MOX, 1NQL, 1XKK, 1YY9, 1Z9I, 2EB2, 2EB3, 2GS2, 2GS7, 2ITN, 2ITO, 2ITP, 2ITQ, 2ITT, 2ITU, 2ITV, 2ITW, 2ITX, 2ITY, 2ITZ, 2J5E, 2J5F, 2J6M, 2JIT
  • 阎浮树阎浮树(学名:;梵语:Jambu),为桃金娘科蒲桃属,又名肯氏蒲桃、海南蒲桃(广州植物志、海南植物志)、堇宝莲、乌墨、鸟木、乌楣、印度蓝莓、印度黑莓等,分布于南亚及东南亚。属多年生乔木,
  • 奥野香耶奥野香耶(日语:奥野香耶,1991年3月1日-)是日本女性声优,岩手县盛冈市出身。隶属于81 Produce、GREEN LEAVES。※粗体字为主要角色
  • Action (U-KISS专辑)《Action》是韩国男子组合U-KISS的第四张日语专辑,在2015年3月18日以五个版本:CD+Blu-ray盘、CD+DVD盘、event LIVE合体盘(日语:イベントLIVE合体盤)、通常盘及mu-mo盘推出。两张打
  • 天主教尼特拉教区天主教尼特拉教区(拉丁语:Dioecesis Nitriensis、斯洛伐克语:Nitrianska diecéza)是罗马天主教在斯洛伐克的一个教区,属布拉迪斯拉发总教区。教区范围包括尼特拉州及特伦钦州一
  • 易州镇易州镇,是中华人民共和国河北省保定市易县下辖的一个乡镇级行政单位。易州镇下辖以下地区:团结路社区、迎宾路社区、友谊路社区、长安路社区、东环路社区、西环路社区、良村、
  • JR西日本521系电力动车组IR石川铁道: IR石川铁道线WDT59B(电动车)EB・TE装置车両异常挙动検知システム521系电力动车组(日语:521系電車)是西日本旅客铁道(JR西日本)的交直流近郊形列车。