BSTR

✍ dations ◷ 2025-11-21 22:05: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相关函数:

相关

  • 帕金森氏病帕金森病(Parkinson's disease,简称PD)是一种影响中枢神经系统的慢性神经退化疾病,主要影响运动神经系统。它的症状通常随时间缓慢出现,早期最明显的症状为颤抖、肢体僵硬、运动
  • 让-奥诺雷·弗拉戈纳尔让-奥诺雷·弗拉戈纳尔(Jean-Honoré Fragonard,1732年4月5日-1806年8月22日),法国罗可可时代最后一位重要代表画家。1732年出生于法国东南部滨海-阿尔卑斯省的格拉斯,他父亲是一
  • 杨属杨属(学名:Populus)属于杨柳科,包含了胡杨、白杨、棉白杨等,通称杨树。杨属植物为落叶乔木,在落叶前叶子变黄。与柳属植物相同,杨属植物的根部有着较强的侵略性,所以它们不能被种植
  • 月海所谓的月海,是指月球月面上比较低洼的平原,用肉眼遥望月球有些黑暗色斑块,这些大面积的阴暗区就叫做月海。月海是月球表面的主要地理单元,总面积上约占全月面的25%。迄今已知的
  • 山下奉文山下奉文(1885年11月8日-1946年2月23日),为大日本帝国陆军的军人,最终军衔为陆军大将。在太平洋战争期间奉命负责指挥日本军第25军进攻英属马来亚(史称马来亚战役),只花2个多月的时
  • 火不思火不思(古蒙语),又叫库布孜(哈语)、忽必丝(蒙古语)、和必斯、浑不似,是亚洲中部弦乐器,似琵琶,但较细长,半蒙蠎皮。通常长2尺7寸。有四弦,但古代多两弦或者三弦。清朝时,属番部合奏乐。火
  • 建国之父美国开国元勋(英语:Founding Fathers of the United States)是指签署《美国独立宣言》和《美国宪法》的政治领导人以及参与美国革命的领袖,又译作建国先贤。他们是美国的奠基者
  • 机上娱乐机上娱乐又可称作飞行娱乐,是指航空公司给乘客在客机上使用的娱乐方式,使旅客可打发在机上的时间。1936年,兴登堡号飞艇曾给往返于欧洲和美国的乘客提供钢琴、休息室、饭厅、吸
  • 伍蠡甫伍蠡甫(1900年9月-1992年10月),艺名敬庵,字叔潜,男,广东新会人,生于上海,中国国画家、美术理论家、翻译家、文学家。文学翻译家伍光建之子。伍蠡甫早年就读于上海青年会中学、上海圣
  • 情歌正传《情歌正传》是美国歌手布鲁诺·马尔斯的首张录音室专辑,于2010年10月4日发行。马尔斯参与了全部歌曲的创作。专辑名称中的“doo-wop”指的是一种音乐流派。专辑中的两首歌曲