BSTR

✍ dations ◷ 2025-07-19 07:59:33 #数据结构

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

相关

  • 殉教殉教,又称殉道,意指为了宗教或信仰而不畏迫害和杀戮,以致牺牲生命。最初无论是圣经还是世俗界,殉教者(martyr)一词的意思都是目击者。其新的意义取自耶稣受难。于是早期基督徒认为
  • 心律在一周期的心脏律动中,如果心肌的去极化从窦房结开始,则称为窦性心律(英文:sinus rhythm)。其特点是心电图(ECG)中展示方向正确的P波(英语:P wave (electrocardiography))。窦性心律是
  • 伊丽莎白·安斯康姆伊丽莎白·安斯康姆(Gertrude Elizabeth Margaret Anscombe 1919年3月18日-2001年1月5日),英国著名分析哲学家,师从路德维希·维特根斯坦。功利主义 · 归结主义 · 义务论 
  • 渥太华渥太华(英语:Ottawa)是加拿大的首都,全国第四大城市,面积2,779平方公里,位于安大略省东南部,渥太华河南岸,多伦多以东400公里,蒙特利尔以西190公里。在2011年人口统计中,渥太华城市有8
  • 刃脊刃脊是一种陡峭的刀状山脊,也叫刃岭、刀岭。通常是由两条冰川侵蚀山脊两侧而形成。也有一些是由两个相邻的冰斗后退而形成刃脊。
  • 火葬场火葬场是用作火葬焚尸的专门场所。场所除火葬所需机械设备外,通常也配有墓园、教堂等相关设施。工业革命之前,火葬通常在室外露天场所进行。由于缺乏密闭的空间和能够产生高温
  • 蒸汽机车蒸汽机车,又称蒸汽火车 (英语:steam locomotive),是以蒸汽机作为动力来源的铁路机车,也是铁路机车最早的发展类别。以煤水车式蒸汽机车为例以华尔夏特阀动装置(英语:Walschaerts v
  • 鲁阿佩胡火山鲁阿佩胡山(Mount Ruapehu)是位于新西兰陶波火山带(Taupo Volcanic Zone)南端的一座活跃的成层火山。它座落在奥阿库尼镇东北23公里处,位于陶波湖西南,距离陶波湖南岸大约40公里。
  • 野菰野菰(学名:),又称蔗寄生、大芸、金锁匙、茶匙黄、土地公拐、芋草菰、番仔烟斗、灌草菰、铁雨伞。广泛分布于热带及亚热带地区,台湾分布于低海拔山区和平野。列当科野菰属的野菰为
  • 氨基锂氨基锂是一种无机化合物,化学式为Li+NH2-。它由锂离子和氨基阴离子(氨的共轭碱)构成。它与氢化锂、亚氨基锂都是具有良好前景的储氢材料。氨基锂可以通过向液氨中加入金属锂来