Skip to content

WSTRING


标准数据类型:宽字符字符串

语法

vb
dim variable as Wstring * size
dim variable as Wstring ptr

描述

Wstring 是宽字符的固定大小数组,如果在编译时知道大小,则永远不会溢出。它没有描述符,除非它是指针并直接使用 Allocate/Reallocate/Deallocate,否则不会调整大小。当变量具有固定的 size(数值常量或可以在编译时求值的表达式)时,FreeBASIC 通过将内容截断为长度 size - 1 来避免在赋值时可能发生的任何溢出。

字符串的末尾由 FreeBASIC 字符串处理函数自动添加的字符 0 标记,因此该字符绝不能是 Wstring 的一部分,否则内容将被截断。创建字符串时将追加字符 0,长度通过扫描字符串中的第一个空字符来计算。

Wstring 中,Len 返回所包含字符串的大小,Sizeof 返回分配给 Wstring 的空间。Sizeof 仅在编译器知道大小时才起作用,即直接传递固定大小的 Wstring 变量,而不是作为解引用指针或 Byref 函数参数。

此类型是为支持非拉丁字母而提供的。任何内置字符串函数(如 Left)都可以与 Wstring 一起使用,字符串运算符也同样适用。

在处理源文件时,FreeBASIC 可以解析包含 Unicode 转义序列(\u)的 ASCII 文件,或使用字节顺序标记(BOM)保存的 UTF-8、UTF-16LE、UTF-16BE、UTF-32LE 和 UTF-32BE 文件。

注意:最可靠的跨平台代码是通过在 ASCII/UTF-8 字符中编码而无需 BOM 来获得的。

FreeBASIC 文本文件函数可以读取和写入不同编码的 Unicode 文件,前提是在打开文件时指定了 encoding。文本在读取时自动转换为内部编码,在写入时转换回文件编码。

sizeof( Wstring ) 返回当前平台中 Wstring 字符使用的字节数。

Wstring 分配动态内存时,最安全的方法是使用 Callocate(或者最坏情况下,使用 Allocate 后立即赋值字符串数据,如第二个示例所示),以避免创建没有空字符的字符串数据(空字符是 Wstring 的终止字符)。

注意:当二元运算符(如赋值、等于、+、* 等)的任意操作数由解引用 'Wstring Ptr' 指针('pw')组成时,这可能给出 'Wstring' 字符串或 'Numeric' 变量,取决于另一个操作数。如果另一个操作数是数值,则解引用的 'Wstring Ptr' 指针('*pw')将被视为对所指向的一个字符的 'Numeric' 引用。如果使用 'Wstring' 指针索引 '[]' 运算符作为解引用语法('pw[n]'),它基本上是 'String' 索引 '[]' 运算符('(\*pw)[n]')的简写版本。

示例

start GeSHi

vb
Dim As WString * 13 str1 => "hello, world"
Print str1
Print Len(str1)    '返回 12,即所包含字符串的长度
Print SizeOf(str1) '返回 13 * sizeof(wstring),即变量使用的字节数

end GeSHi

start GeSHi

vb
Dim As WString Ptr str2
str2 = Allocate( 13 * Len(WString) )
*str2 = "hello, world"
Print *str2
Print Len(*str2)      '返回 12,即所指向字符串的长度

end GeSHi

平台差异

对宽字符串的支持依赖于平台上可用的 C 运行时库,内部格式可能有所不同。

  • FreeBASIC 的 DOS 版本不支持 Unicode。在此版本中,字符始终占用 1 个字节,Wstring 的行为与标准 ASCII Zstring 相同。
  • 在 Win32 上,FreeBASIC 宽字符串以 UCS-2 编码,每个字符使用两个字节(16 位),因此只能编码 Unicode 的前 65,536 个码点,即基本多语言平面(BMP)。FreeBASIC 不支持 BMP 之外的 Win32 UTF-16 4 字节代理编码。
  • 在 Linux 上,宽字符串以 UCS-4 编码,每个字符占用 4 个字节。

方言差异

  • -lang qb 方言中不可用,除非使用别名 __Wstring 引用。

与 QB 的区别

  • FreeBASIC 新增

参见

  • String(数据类型)
  • Zstring(数据类型)
  • String(函数)
  • Wstring(函数)
  • Wspace
  • Wstr
  • Wchr
  • Wbin
  • Whex
  • Woct
  • Winput()
  • Standard Data Type Limits
  • Extends Wstring

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系