WSTRING
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgWstring
- 最后更新: 2022-04-07
标准数据类型:宽字符字符串
语法
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
Dim As WString * 13 str1 => "hello, world"
Print str1
Print Len(str1) '返回 12,即所包含字符串的长度
Print SizeOf(str1) '返回 13 * sizeof(wstring),即变量使用的字节数end GeSHi
start GeSHi
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的行为与标准 ASCIIZstring相同。 - 在 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(函数)WspaceWstrWchrWbinWhexWoctWinput()Standard Data Type LimitsExtends Wstring
返回 目录