BSTR

✍ dations ◷ 2025-09-17 18:52:05 #数据结构

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

相关

  • 自然分娩自然分娩是一种没有常规医疗介入(包括麻醉)的分娩方式。相对于一般工业化社会中配合医疗技术的分娩方式,自然分娩希望让医疗的介入降到最低,特别是像麻醉药、会阴切开术等医疗介
  • 顶叶顶叶(Parietal lobe)是大脑的一部分,位在额叶、枕叶和颞叶之间,而其与额叶的分界线为中央沟,另外顶枕沟为顶叶和枕叶的分界线。一般而言,顶叶为处理各类感觉讯息(包括痛觉、触觉等)
  • F/A-18黄蜂式战斗攻击机48.9千牛顿(11,000英磅力)(军用推力)78.7千牛顿(17,700英磅力)(后燃推力) 57.8千牛顿(13,000英磅力)(军用推力)麦克唐纳-道格拉斯F/A-18大黄蜂式战斗攻击机(英语:McDonnell Douglas F/A-1
  • 砂之器《砂之器》(日语:砂の器・すなのうつわ)是日本作家松本清张创作的社会派推理小说,书名的意思是“砂子做成的容器”。于1960年5月17日到1961年4月20日间在读卖新闻夕刊连载,同年由
  • 外赫布里底群岛外赫布里底群岛(英语:Outer Hebrides;苏格兰盖尔语:Na h-Eileanan Siar),又称西部群岛(Western Isles)、长岛(Long Island)或埃利安锡尔(Eilean Siar),是英国苏格兰32个一级行政区之一。
  • 熊召政熊召政(1953年12月-),湖北英山人,中国诗人、作家,第六届茅盾文学奖得主,现任中国文联全委会委员。早年参过军,下过乡,22岁起担任英山县文化馆创作辅导干部。1973年,发表第一首长诗《献
  • 地铁站地铁站,台湾称作捷运站,为属于城市轨道交通系统的铁路车站,通常采用地下或高架方式建构车站。多线交会的地铁站可能有许多层,一般分为大堂和月台,因此必须装设大量电扶梯、楼梯及
  • 信德族信德族(信德语:سنڌي),是巴基斯坦四大民族之一,是说信德语的印欧语系民族,分布于巴基斯坦信德省与印度西部。他们原是印度帝国信德省的一个民族,信德省在公元前三千年就有人类居
  • 国际辐射单位与度量委员会国际辐射单位与度量委员会(英语:International Commission on Radiation Units and Measurements,简称ICRU)是一标准化组织,1925年由国际放射学会议(International Congress of Ra
  • TR35TR35是由麻省理工学院创刊的杂志每年评选年龄在35岁以下的全球最佳35名创新人士的名单。一些杰出获奖人包括Google联合创始人拉里·佩奇和谢尔盖·布林、PayPal联合创始人马