FreeBASIC マニュアルのトップに戻る

FreeBASIC Wstring (文字)

目次→言語リファレンス→変数とデータ型→標準のデータ型→文字型→WSTRING (文字)←オリジナル・サイト
目次→ランタイム・ライブラリー参考→文字列関数WSTRING (文字)←オリジナル・サイト

WSTRING (文字) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

★このページの html は、UTF-8 です。★
標準のデータ型: ワイド文字列
(英数字のように、1バイトではなく、日本語のようにマルチ・バイトで表現される文字の文字列)

構文:
dim variable as Wstring * size
dim variable as Wstring PTR

記述:
Wstring は、広い文字の、固定サイズの配列で、コンパイル時にサイズが分かっていれば、決してあふれることはありません。
これは記述子を持っていません。そして、ポインターで Allocate/Reallocate/Deallocate を直接使わない限り、サイズが変更されることはありません。
固定 size の変数(数値定数、コンパイル時に評価できる式)の場合、FreeBASICは、内容を size - 1 の長さに切り捨てることで、代入で発生しうる桁あふれを避けています。

文字列の終わりは、FreeBASIC の文字列処理関数により自動的に追加される文字 0 により明示されます。
このため、文字 0 は、Wstring の一部であってはなりません。さもないと、内容は切りつめられてしまいます。
文字列が作成される時に、文字 0 が付加されます。そして、長さは、文字列で、最初のヌル文字を走査することによって計算されます。

Wstring で、Len は含まれた文字列のサイズを返します。そして、Sizeof は、Wstring に割り当てられるスペースを返します。
Sizeof は、コンパイラがサイズを知っている場合、つまり、固定サイズの Wstring 変数が、逆参照されたポインタや Byref 関数の引数としてではなく、直接渡された場合にのみ動作します。

この型は、非ラテン文字をサポートするために提供します。
Left のような、組み込みの文字列関数は、文字列演算子と同様に Wstring でも動作します。

ソース・ファイルを処理するとき、FreeBASIC は、ユニコード・エスケープ文字列(\u)、UTF-8、UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE で ASCII ファイルを解析できます。
ただし、Byte Order Mark(BOM) 付きで保存されている場合に限ります
一般に UTF-8 は BOM 無しも許されますが、FreeBASIC では UTF-8 として認識するために BOM が必要であることに注意して下さい。

WStr 関数を使うと、ASCII 文字列を、ユニコード文字列に変換できます。


注意: クロスプラットフォーム で最も信頼性の高いコードは、ASCII/UTF-8 文字で BOM なしでエンコードすることによって得られます。

FreeBASIC テキストファイル関数は、ファイルを開くときに encoding が指定されると、異なるエンコーディングのユニコード・ファイルを、読み書きできます。 テキストは、自動的に、読み込むときに内部のエンコーディングに変換され、書き出すときにファイル・エンコーディングに変換戻しされます。

sizeof( Wstring ) は、現在のプラットホームの Wstring 文字によって使われたバイト数を返します。

Wstring に動的メモリを割り当てる場合、最も安全なのは、ヌル文字(Wstring の終端文字)なしの文字列データの作成を避けるために、Callocate を使うことです(または、最悪の場合、2番目の例のように、文字列データの即時割り当てが続く Allocate を使います)。

注: 二項演算子(代入、等号、+、*、...)の演算対象が、'Wstring Ptr' ポインタ ('pw') の逆参照で構成される場合、他の演算対象に応じて、'Wstring' 文字列または 'Numeric' 変数を与えることができます 。
他の演算対象が、数値の場合、逆参照された 'Wstring Ptr' ポインタ ('*pw') は、示された 1文字への 'Numeric' 参照として扱われます。
'Wstring' ポインター索引 '[]' 演算子が、逆参照構文 ('pw[n]') として使われる場合、基本的に 'String' 索引 '[]' 演算子('(*pw)[n]') の短縮バージョンです。

例:
Dim As WString * 13 str1 => "hello, world"
Print str1
Print Len(str1)    '12 と表示されます。それが含む文字列の長さを返します。
Print SizeOf(str1) '13 と表示されます。 * sizeof(wstring), 変数で使われるバイト数
Sleep

Dim As WString Ptr str2
str2 = Allocate( 13 * Len(WString) )
*str2 = "hello, world"
Print *str2
Print Len(*str2)      '12 と表示されます。それが示す文字列の長さを返します。
Sleep


下は、MessageBox に、日本語を表示する例です。このコードは、UNICODE で保存して下さい。
注:MessageBox()の構文
int MessageBox(HWND hWnd , LPCTSTR lpText , LPCTSTR lpCaption , UINT uType)
hWnd - オーナーウィンドウを指定。NULLの場合はオーナーウィンドウを持ちません
lpText - メッセージボックスに表示する文字列
lpCaption - タイトルバーに表示される文字列
uType - メッセージボックスの内容

戻り値 - メッセージボックスの押されたボタンを整数値で返します
   MessageBox の詳細は、下記を参照下さい。
   Win32API メッセージボックス

#ifdef __FB_WIN32__
# define unicode
# include once "windows.bi"
#endif

const LANG = "Japanese"

	dim helloworld as wstring * 20 => "こんにちは 世界!"

	print """Hello World!"" in "; LANG; ": "; helloworld

#ifdef __FB_WIN32__
	messagebox( 0, helloworld, """Hello World!"" in " & LANG & ":", MB_OK )
#endif


下は、MessageBox に、中国語を表示する例です。このコードは、UNICODE で保存して下さい。

#ifdef __FB_WIN32__
# define unicode
# include once "windows.bi"
#endif

const LANG = "Chinese"
	dim helloworld as wstring * 20 => "好,世界!"

	print """Hello World!"" in "; LANG; ": "; helloworld

#ifdef __FB_WIN32__
	messagebox( 0, helloworld, """Hello World!"" in " & LANG & ":", MB_OK )
#endif

プラットホーム差:
 wstringsのサポートは、そのプラットホームで利用可能な Cランタイム・ライブラリに依存します。内部形式は、異なるかもしれません。


方言差:

QBからの違い:

参照:
標準のデータ型 に戻る
文字列関数 に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2022-04-07 13:23:29
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承