BSTR

✍ dations ◷ 2025-12-10 17:39:01 #数据结构

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

相关

  • .mw-parser-output ruby.zy{text-align:justify;text-justify:none}.mw-parser-output ruby.zy>rp{user-select:none}.mw-parser-output ruby.zy>rt{font-feature-settings:
  • 马卢尔县马卢尔县(英语:Malheur County,发音: /mælˈhɪər/)是美国俄勒冈州东南部的一个县,东隔蛇河与爱达荷州相望,南邻内华达州。马卢尔县亦是组成东俄勒冈的八个县份之一。马卢尔县面
  • 伊斯兰教的先知穆斯林认为先知(阿拉伯语:نبي)是凡人,是真主派遣的。每位先知都带来了伊斯兰式的基本信息,包括独一造物主的信仰,避免偶像崇拜与罪恶。他们都向大众传播伊斯兰教,并告知将出现见
  • H. influenzae流感嗜血杆菌(学名:Haemophilus influenzae),简称嗜血杆菌,前称费佛氏杆菌(或译拜菲尔氏菌)或流感杆菌,是一种没有运动力的革兰氏阴性杆菌。它是于1892年由费佛(英语:Richard Friedric
  • 台湾电影文化公司台湾电影文化事业股份有限公司(英语:Taiwan Film Culture Co.,简称台湾电影文化公司、台影),为台湾第一个大型电影制片厂。1956年,台湾省电影摄制场开始制作海外版新闻片,每3个月1
  • 糖尿病昏迷糖尿病昏迷为一种常见的内科急症,只有通过准确且有效的治疗才能让患者及时康复,相反,若不及时抢救亲者脑部缺氧瘫痪及会诱发各种并发症以至患者死亡。其确诊依赖于患者病史、
  • ABC (编程语言)ABC,一种编程语言与编程环境,起源于荷兰数学和计算机科学研究学会,最初的设计者为Leo Geurts、Lambert Meertens与Steven Pemberton。程序风格受到ALGOL-68的影响,最初用来取代B
  • 瑟巴斯坦·莱特纳瑟巴斯坦·莱特纳(德语:Sebastian Leitner,1919年-1989年)是德国的评论家和科学的普及者。1919年出生于萨尔茨堡,在维也纳就学时,他暂时的被纳粹羁押,于1983年,由于他反对德意志帝国
  • 泉里香泉里香(日语:泉 里香/いずみ りか ,1988年10月11日-),本名‘泉里香’。日本的模特儿兼女演员。京都府出身。身高166cm,血型是A型。浜千咲、泉梨华及泉里果均为旧艺名。隶属于Stardu
  • 南岭小檗南岭小檗(学名:)为小檗科小檗属的植物,为中国的特有植物。分布于中国大陆的四川、广西、江西、广东、湖南等地,生长于海拔1,400米至2,800米的地区,一般生于灌丛中、路边、山顶阳处