BSTR

✍ dations ◷ 2025-11-18 22:28:25 #数据结构

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

相关

  • 演化经济学演化经济学研究竞争中变化发展的市场过程,对应于静态均衡的新古典经济学。它以历史的不可逆视角观察经济现象。它研究开放的系统,关注变革、学习、创造。竞争过程是非均衡的,具
  • 发电发电(英语:Electricity generation),泛指从其它种类的能源转换为电力的过程。 现今主要使用的发电基本原理,于公元1820~1830年间,由英国科学家麦可·法拉第所发现。法拉第电磁感应
  • 逆偶例谬误逆偶例谬误(converse accident)或逆偶然谬误、逆意外谬误是一种“例外凌驾通则”的非形式谬误,是基于某个例外的存在,而否定一般性的通则。解说:救护车是例外,不代表应该设下速限
  • 巴尔顿威廉·基宁蒙德·伯顿(英语:William Kinninmond Burton,1856年5月11日-1899年8月5日),又译为爸尔登,英国苏格兰爱丁堡人,应台湾总督府之邀担任卫生工程顾问技师,进行台湾各地卫生工程
  • 孙敏孙敏(1956年-),男,生于安徽淮北,原籍河北大城,峨嵋电影制片厂演员,中国电影金鸡奖最佳男配角得主。
  • 油彩蜡膜虾Hymenocera elegans Heller, 1861油彩蜡膜虾(学名:Hymenocera picta),又称为海星虾、贵宾虾、丑角虾、小丑虾、跳舞虾 ,是生活于热带太平洋及印度洋珊瑚礁的一种海水虾。一般认为
  • 圆锥摆圆锥摆是一个固定在一根悬挂在中心点上的绳子(或轻杆)的重物。其结构与单摆类似,但重物并不是像单摆一样来回摆动,而是以一个恒定的速度在水平面上做圆周运动,并和细绳(或轻杆)一起
  • 铝土矿尾矿铝土矿尾矿、矿渣,或氧化铝精练矿渣,是氧化铝工业生产的副产品之一。氧化铝是生产金属铝的主要原料,同时也被广泛地应用于陶瓷、磨料及耐火材料的生产中。大量产生的铝土矿尾矿
  • 曹仁虎曹仁虎(1731年-1787年),字来殷,号习庵,江南嘉定人,清朝政治人物,进士出身。仁虎少喜读书,辨悟通达。年十六即补诸生,学使崔纪以其为异才。乾隆二十二年(1757年)乾隆帝南巡,召试一等,特赐举
  • 芳汀芳汀(Fantine)又译:芳婷是法国作家雨果小说《悲惨世界》里的主要登场角色。其身世十分悲惨,与斐利克斯·托洛米埃有一私生女珂赛特后便被对方抛弃,为了女儿能付出一切,最后甚至沦