## Tcl8.6.17/Tk8.6.17 Documentation > Tcl Commands > binary

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    binary — 二進列から欄枠の挿入と抽出 Insert and extract fields from binary strings
  構文 SYNOPSIS
  説明 DESCRIPTION
  二進列の符号化と復号 BINARY ENCODE AND DECODE
    base64
      -maxlen length
      -wrapchar character
      -strict
    hex
      -strict
    uuencode
      -maxlen length
      -wrapchar character
      -strict
  二進書式指定 BINARY FORMAT
    a
    A
    b
    B
    H
    h
    c
    s
    S
    t
    i
    I
    n
    w
    W
    m
    f
    r
    R
    d
    q
    Q
    x
    X
    @
  BINARY SCAN
    a
    A
    b
    B
    H
    h
    c
    s
    S
    t
    i
    I
    n
    w
    W
    m
    f
    r
    R
    d
    q
    Q
    x
    X
    @
  互換性の問題 PORTABILITY ISSUES
  用例 EXAMPLES
  SEE ALSO
  KEYWORDS

### NAME

binary — 二進列から欄枠の挿入と抽出 Insert and extract fields from binary strings

### 構文 SYNOPSIS

binary decode format ?-option value ...? data
binary encode format ?-option value ...? data
binary format formatString ?arg arg ...?
binary scan string formatString ?varName varName ...?

### 説明 DESCRIPTION

本命令は二進列データを操る便宜を提供する｡副命令 binary format は､通常の Tcl 値から二進列を作成する｡譬えば､32ビット装置で､値16と22が与えられると､それぞれの数の為の二つの4バイト整数から構成される8バイトの二進列を生成する｡副命令 binary scan は､その逆を行う: 即ち､二進列からデータを抽出し通常の Tcl 文字列値として返す｡ binary encode と binary decode 副命令は､ base64 (譬えば､電子郵便に頻用される MIME 伝言文に使われる)の様に､二進データから文字列符号に､或はその逆向けに､変換する｡ This command provides facilities for manipulating binary data. The subcommand binary format creates a binary string from normal Tcl values. For example, given the values 16 and 22, on a 32-bit architecture, it might produce an 8-byte binary string consisting of two 4-byte integers, one for each of the numbers. The subcommand binary scan, does the opposite: it extracts data from a binary string and returns it as ordinary Tcl string values. The binary encode and binary decode subcommands convert binary data to or from string encodings such as base64 (used in MIME messages for example).

註意すべきは､その他の二進データの操作､譬えば､部分的な並びの取出しや､長さの取得や､何かの符号系の文字列として解釈し直すことは､他の Tcl 命令によってなされる(先の例では､それぞれ string range と string length と encoding convertfrom による)｡ Tcl の二進列は単に､それに含まれる全ての文字が \u0000～\u00FF の範囲であるものである｡ Note that other operations on binary data, such as taking a subsequence of it, getting its length, or reinterpreting it as a string in some encoding, are done by other Tcl commands (respectively string range, string length and encoding convertfrom in the example cases). A binary string in Tcl is merely one where all the characters it contains are in the range \u0000-\u00FF.

### 二進列の符号化と復号 BINARY ENCODE AND DECODE

二進データを可読の文字列に符号化する時､初めの二進データは使用する符号系の名前と､符号系固有の任意個数の望ましい指示項目と共に binary encode 命令に渡される｡符号化されたデータは binary decode を使って二進形式に逆変換できる｡次の形式と指示項目に対応している｡ 　　 When encoding binary data as a readable string, the starting binary data is passed to the binary encode command, together with the name of the encoding to use and any encoding-specific options desired. Data which has been encoded can be converted back to binary form using binary decode. The following formats and options are supported.

base64
  この base64 二進符号化は一般に電子郵便伝言文と XML 説明文に使用され､大部分の大文字小文字と数字を使う｡情報を失わずに､任意に再畳込みされることができるという特徴がある｡ The base64 binary encoding is commonly used in mail messages and XML documents, and uses mostly upper and lower case letters and digits. It has the distinction of being able to be rewrapped arbitrarily without losing information.

  符号化の際､次の指示項目に対応している: During encoding, the following options are supported:

  -maxlen length
    出力は length 文字を超えない行に分割されることを示す｡省略時設定は分割なし｡ Indicates that the output should be split into lines of no more than length characters. By default, lines are not split.

  -wrapchar character
    -maxlen 指示項目によって行が分割される時､ character が行の分離に使われることを指し示す｡省略時設定は改行文字 “\n”｡ Indicates that, when lines are split because of the -maxlen option, character should be used to separate lines. By default, this is a newline character, “\n”.

  復号化の際に､次の指示項目に対応している: During decoding, the following options are supported:

  -strict
    正確には文字符号系そのものの部分ではない文字に遭遇した時は､復号譜に不都合を発生するよう指導する｡それ以外は無視する｡ base64 復号譜の為の RFC 2045 呼出しは非-正確でなければならない｡ Instructs the decoder to throw an error if it encounters any characters that are not strictly part of the encoding itself. Otherwise it ignores them. RFC 2045 calls for base64 decoders to be non-strict.

hex
  この hex 二進符号変換はそれぞれのバイトを､十六進整数としてバイトの値を表現する十六進数文字の一対に変換する｡符号化の時は､下位の文字が使用される｡復号時には､上位と下位の文字が利用される｡ The hex binary encoding converts each byte to a pair of hexadecimal digits that represent the byte value as a hexadecimal integer. When encoding, lower characters are used. When decoding, upper and lower characters are accepted.

  符号化には指示項目は何も適用されない｡復号化では､次の指示項目に対応している: 　 No options are supported during encoding. During decoding, the following options are supported:

  -strict
    空白文字と遭遇した時に不都合を発生する様､復号化譜に指示する｡指示しない場合は空白を無視する｡ Instructs the decoder to throw an error if it encounters whitespace characters. Otherwise it ignores them.

uuencode
  この uuencode 二進符号系は Unix 系と USENET の間のデータ変換に使われたが､最近では余り使われず､ base64 二進符号系にとって代られている｡ The uuencode binary encoding used to be common for transfer of data between Unix systems and on USENET, but is less common these days, having been largely superseded by the base64 binary encoding.

  符号化の際に､次の選択肢に対応している(その変更により他の復号機能の実装譜が処理できなくなるファイルを生成するにも拘わらず): 　　　 During encoding, the following options are supported (though changing them may produce files that other implementations of decoders cannot process):

  -maxlen length
    それぞれの符号化された行を生成する為の最大文字数を指し示す｡適正な範囲は 5 から 85 である｡範囲外の行長さは符号化書式には収容できない｡省略時設定の値は 61 である｡ Indicates the maximum number of characters to produce for each encoded line. The valid range is 5 to 85. Line lengths outside that range cannot be accommodated by the encoding format. The default value is 61.

  -wrapchar character
    符号化されたそれぞれの行の末尾を示す為に使われる文字(複数可)を指し示す｡受容れられる値は､ { \x09 (TAB), \x0B (VT), \x0C (FF), \x0D (CR) } の揃い組の中の零個或はそれ以上の文字の並びの後ろに零個又は一個の改行 \x0A (LF) が続いた文字列である｡それ以外のどの様な値も､復号できない符号化文書を生成するので､拒絶される｡省略時設定は一個の改行である｡ Indicates the character(s) to use to mark the end of each encoded line. Acceptable values are a sequence of zero or more characters from the set { \x09 (TAB), \x0B (VT), \x0C (FF), \x0D (CR) } followed by zero or one newline \x0A (LF). Any other values are rejected because they would generate encoded text that could not be decoded. The default value is a single newline.

  復号化では､次の選択肢に対応している: 　 During decoding, the following options are supported:

  -strict
    何であれ標準符号化書式以外に遭遇した場合は不都合を発生するよう符号化譜に指導する｡この指示項目がないと､符号化譜は幾つかの逸脱を許容する､主に符号化譜と復号化譜の間の逆向き行を許容する｡ Instructs the decoder to throw an error if it encounters anything outside of the standard encoding format. Without this option, the decoder tolerates some deviations, mostly to forgive reflows of lines between the encoder and decoder.

  註意すべきは符号化処理機能も復号化処理機能も uuencode 書式の冒頭部や脚部を処理する事はない｡ Note that neither the encoder nor the decoder handle the header and footer of the uuencode format.

### 二進書式指定 BINARY FORMAT

この binary format 命令は二進列を生成する､その際､その配置は formatString によって定められ､その内容は追加の引数から持込まれる｡結果の二進値が返される｡ 　　 The binary format command generates a binary string whose layout is specified by the formatString and whose contents come from the additional arguments. The resulting binary value is returned.

formatString は0個以上の空白で区切られた､0個以上の幾つかの隣接した欄枠規定子の並びで構成される｡それぞれの欄枠規定子は一文字の型指定文字に必要に応じて旗標文字が続き､更に､必要に応じて個数を表す数字が続く｡書式設定されるべき値を得る為に､大部分の欄規定子は引数毎に一つづつ宛がわれる｡型指定文字は､値がどの様に書式化されるかを規定する｡個数は､値から指定した型の項目が幾つ取出せるかを示す｡個数の指定は､指定されている場合は､非負の十進整数か､*か､であり､後者は､通常､値の中の全ての項目を使用することを指定する｡もし､引数の個数と､引数に宛がわれる書式文字列の個数が一致しないと不都合が生る｡binary format については､旗標文字は無視される｡ The formatString consists of a sequence of zero or more field specifiers separated by zero or more spaces. Each field specifier is a single type character followed by an optional flag character followed by an optional numeric count. Most field specifiers consume one argument to obtain the value to be formatted. The type character specifies how the value is to be formatted. The count typically indicates how many items of the specified type are taken from the value. If present, the count is a non-negative decimal integer or *, which normally indicates that all of the items in the value are to be used. If the number of arguments does not match the number of fields in the format string that consume arguments, then an error is generated. The flag character is ignored for binary format.

之は､欄指定子と引数の関係を明確にする小さな例である: 　　 Here is a small example to clarify the relation between the field specifiers and the arguments:

    binary format d3d {1.0 2.0 3.0 4.0} 0.1

第一引数は４個の数のリストであるが､対応する欄枠規定子の個数は3である為､先頭から３つだけが使用される｡第二引数は第二の欄規定子に対応する｡結果となる二進列は４つの数 1.0 と 2.0 と 3.0 と 0.1 で構成される｡ 　　　 The first argument is a list of four numbers, but because of the count of 3 for the associated field specifier, only the first three will be used. The second argument is associated with the second field specifier. The resulting binary string contains the four numbers 1.0, 2.0, 3.0 and 0.1.

夫々の､型-個数 対は想像上の遊走子として二進列データの上を移動する､現在の位置にあるバイトを保存し､最後に保存したバイトの直後に遊走子を進める｡最初は遊走子はデータの初めの 0 位置にある｡型は次の文字のどれか一つである: 　　 Each type-count pair moves an imaginary cursor through the binary data, storing bytes at the current position and advancing the cursor to just after the last byte stored. The cursor is initially at position 0 at the beginning of the data. The type may be any one of the following characters:

a
  長さ count 個のバイト列を出力列に保存する｡全ての文字は､256の剰余を取る(即ち､全ての文字の下バイトを使い､上バイトは棄てる)従って､\u0000～\u00ff の文字で完全には表現できない文字列を保存する場合､この切詰めが望ましくない時は(即ち､文字がISO 8859-1 文字列組の範囲外の場合[訳註 漢字や仮名はこれに該当する])､予め､ encoding convertto 命令を使って文字列を外部表現に変更しておくべきである｡もし､引数 が count バイトより短いと追加的な零バイトが欄に詰める為に使われる｡もし､引数 が指定の長さより長いと､余分な文字は無視される｡もし､ count が * であると､引数 arg 中の全てのバイトが書式化される｡もし､ count が省略されると､1文字が書式化される｡譬えば､ 　　 Stores a byte string of length count in the output string. Every character is taken as modulo 256 (i.e. the low byte of every character is used, and the high byte discarded) so when storing character strings not wholly expressible using the characters \u0000-\u00ff, the encoding convertto command should be used first to change the string into an external representation if this truncation is not desired (i.e. if the characters are not part of the ISO 8859-1 character set.) If arg has fewer than count bytes, then additional zero bytes are used to pad out the field. If arg is longer than the specified length, the extra characters will be ignored. If count is *, then all of the bytes in arg will be formatted. If count is omitted, then one character will be formatted. For example,

      binary format a7a*a alpha bravo charlie

  は､ alpha\000\000bravoc に等しい文字列を返す､ will return a string equivalent to alpha\000\000bravoc,

      binary format a* [encoding convertto utf-8 \u20ac]

  は､ \342\202\254 に等しい文字列を返す(これは､ユウロ通貨文字の UTF-8 バイト列である)｡又　 　 　　 will return a string equivalent to \342\202\254 (which is the UTF-8 byte sequence for a Euro-currency character) and

      binary format a* [encoding convertto iso8859-15 \u20ac]

  は､ \244 に等しい文字列を返す(之は､ユウロ通貨文字の 8859-15 バイト列である)｡之に反して､最後の二例の代わりに:　　　 will return a string equivalent to \244 (which is the ISO 8859-15 byte sequence for a Euro-currency character). Contrast these last two with:

      binary format a* \u20ac

  は､ \254 (即ち \xac)に等しい文字列を返す､上位バイトの切詰めが生じた為で､恐らくは望ましい結果とは異なるであろう｡ 　　 which returns a string equivalent to \254 (i.e. \xac) by truncating the high-bits of the character, and which is probably not what is desired.

A
  この形式は､隙間にヌルを詰める代わりに空白を詰めることを除いて a と同じである｡譬えば､ 　　 This form is the same as a except that spaces are used for padding instead of nulls. For example,

      binary format A6A*A alpha bravo charlie

  は､ alpha bravoc を返す｡ will return alpha bravoc.

b
  長さ count の二進の数字の列を､出力文字列の各バイトに､下-上 の順に保存する｡ 引数 は文字1と0から成る列でなければならない｡結果のバイト列は､下-上 順にビットで整形された各バイトが､初めから終わりの順に送り出される｡もし､引数 の数字が count 数字より少ないと追加的な零が残りのビットに詰められる｡もし､引数 が指定の数より多い数字を有していると､余分な数字は無視される｡もし､ count が * であると､引数 中の全ての数字が書式化される｡もし､ count が省略されると､1つの数字が書式化される｡もし､書式化されたビットの個数がバイト切れ目に会わないと､最後のバイトの残りのビットは零になる｡譬えば､ Stores a string of count binary digits in low-to-high order within each byte in the output string. Arg must contain a sequence of 1 and 0 characters. The resulting bytes are emitted in first to last order with the bits being formatted in low-to-high order within each byte. If arg has fewer than count digits, then zeros will be used for the remaining bits. If arg has more than the specified number of digits, the extra digits will be ignored. If count is *, then all of the digits in arg will be formatted. If count is omitted, then one digit will be formatted. If the number of bits formatted does not end at a byte boundary, the remaining bits of the last byte will be zeros. For example,

      binary format b5b* 11100 111000011010

  は､\x07\x87\x05 に等しい文字列を返す｡ will return a string equivalent to \x07\x87\x05.

B
  この形式は､各バイト内でビットが､上-下の順に保存されることを除いて b と同じである｡譬えば､ This form is the same as b except that the bits are stored in high-to-low order within each byte. For example,

      binary format B5B* 11100 111000011010

  は､ \xe0\xe1\xa0 に等しい文字列を返す｡ will return a string equivalent to \xe0\xe1\xa0.

H
  count 個の十六進数の数字を出力文字列の各バイト内に､上-下の順に保存する｡ 引数 arg は､ “0123456789abcdefABCDEF” の中の文字を組合せた文字列でなければならない｡結果の文字列は､上-下の順に十六進数を書式化した各バイトを最初から最後の順に出力される｡もし､引数 arg の数字が count 数字より少ないと追加的な零が残りの数字として詰められる｡もし､引数 が指定の数より多い数字を有していると､余分な数字は無視される｡もし､ count が * であると､ 引数 中の全ての数字が書式化される｡もし､ count が省略されると､1つの数字が書式化される｡もし､書式化されたビットの個数がバイト切れ目に会わないと､最後のバイトの残りのビットは零になる｡譬えば､ Stores a string of count hexadecimal digits in high-to-low within each byte in the output string. Arg must contain a sequence of characters in the set “0123456789abcdefABCDEF”. The resulting bytes are emitted in first to last order with the hex digits being formatted in high-to-low order within each byte. If arg has fewer than count digits, then zeros will be used for the remaining digits. If arg has more than the specified number of digits, the extra digits will be ignored. If count is *, then all of the digits in arg will be formatted. If count is omitted, then one digit will be formatted. If the number of digits formatted does not end at a byte boundary, the remaining bits of the last byte will be zeros. For example,

      binary format H3H*H2 ab DEF 987

  は､\xab\x00\xde\xf0\x98 に等しい文字列を返す｡ will return a string equivalent to \xab\x00\xde\xf0\x98.

h
  この形式は､各バイトに､下-上の順に保存することを除いて､H と同じである｡譬えば､ This form is the same as H except that the digits are stored in low-to-high order within each byte. This is seldom required. For example,

      binary format h3h*h2 AB def 987

  は､\xba\x00\xed\x0f\x89 に等しい文字列を返す｡ will return a string equivalent to \xba\x00\xed\x0f\x89.

c
  一個以上の八ビット整数値を出力列に保存する｡もし､count が指定されないと､引数 は一つの整数で構成されねばならない｡もし､ count が指定されると､ 引数 は少なくとも､その個数より多くの数字からなるリストで構成されねばならない｡各整数値の低位の8ビットが遊走子の位置に一バイトとして保存される｡もし､count が * であると､リスト中の全ての数字が書式化される｡もしリストの要素個数が count より多いと､余分な要素は無視される｡譬えば､ 　 Stores one or more 8-bit integer values in the output string. If no count is specified, then arg must consist of an integer value. If count is specified, arg must consist of a list containing at least that many integers. The low-order 8 bits of each integer are stored as a one-byte value at the cursor position. If count is *, then all of the integers in the list are formatted. If the number of elements in the list is greater than count, then the extra elements are ignored. For example,

      binary format c3cc* {3 -3 128 1} 260 {2 5}

  は､\x03\xfd\x80\x04\x02\x05 に等しい文字列を返す｡此処で will return a string equivalent to \x03\xfd\x80\x04\x02\x05, whereas

      binary format c {2 5}

  は､不都合を生じる｡ will generate an error.

s
  この形式は､一つ以上の１６ビット整数を､最下位バイトを先頭に並べる流儀(little-endian)で出力文字列に保存することを除いて c と同じである｡各数字の下位１６ビットが２バイト値として､遊走子の位置に､最下位バイトを先頭に保存される｡譬えば､ 　　　 This form is the same as c except that it stores one or more 16-bit integers in little-endian byte order in the output string. The low-order 16-bits of each integer are stored as a two-byte value at the cursor position with the least significant byte stored first. For example,

      binary format s3 {3 -3 258 1}

  は､\x03\x00\xfd\xff\x02\x01 に等しい文字列を返す｡ will return a string equivalent to \x03\x00\xfd\xff\x02\x01.

S
  この方式は､一つ以上の１６ビット整数を､最上位バイトを先頭に並べる流儀(big-endian)で出力文字列に保存することを除いて s と同じである｡譬えば､ This form is the same as s except that it stores one or more 16-bit integers in big-endian byte order in the output string. For example,

      binary format S3 {3 -3 258 1}

  は､\x00\x03\xff\xfd\x01\x02 に等しい文字列を返す｡ will return a string equivalent to \x00\x03\xff\xfd\x01\x02.

t
  この形式(tiny と憶えてくれ)は､１６ビットの整数を､Tclを実行している機械装置がバイトを並べる元来の順序で､出力文字列に保存することを除いて s 及び S と同じである｡機械装置がバイトを並べる元来の順序の指定は､ tcl_platform 配列変数の byteOrder 要素を参照されたい｡(訳註 x86系はLittle Endian) 　　　　　　　 This form (mnemonically tiny) is the same as s and S except that it stores the 16-bit integers in the output string in the native byte order of the machine where the Tcl script is running. To determine what the native byte order of the machine is, refer to the byteOrder element of the tcl_platform array.

i
  この形式は､３２ビット整数を､最下位バイトを先頭に並べる流儀(little-endian)で出力文字列に保存することを除いて c と同じである｡各数字の下位３２ビットが４バイト値として､遊走子の位置に､最下位バイトを先頭に保存される｡譬えば､ 　　　 This form is the same as c except that it stores one or more 32-bit integers in little-endian byte order in the output string. The low-order 32-bits of each integer are stored as a four-byte value at the cursor position with the least significant byte stored first. For example,

      binary format i3 {3 -3 65536 1}

  は \x03\x00\x00\x00\xfd\xff\xff\xff\x00\x00\x01\x00 に等しい文字列を返す will return a string equivalent to \x03\x00\x00\x00\xfd\xff\xff\xff\x00\x00\x01\x00

I
  この形式は､一つ以上の３２ビット整数を､最上位バイトを先頭に並べる流儀(big-endian)で出力文字列に保存することを除いて i と同じである｡譬えば､ This form is the same as i except that it stores one or more one or more 32-bit integers in big-endian byte order in the output string. For example,

      binary format I3 {3 -3 65536 1}

  は､\x00\x00\x00\x03\xff\xff\xff\xfd\x00\x01\x00\x00 に等しい文字列を返す｡ will return a string equivalent to \x00\x00\x00\x03\xff\xff\xff\xfd\x00\x01\x00\x00

n
  この形式(number とか normal と憶えてくれ)は､３２ビットの整数を､Tclを実行している機械装置がバイトを並べる元来の順序で､出力文字列に保存することを除いて i 及び I と同じである｡機械装置がバイトを並べる元来の順序の指定は､ tcl_platform 配列変数の byteOrder 要素を参照されたい｡ 　　　 This form (mnemonically number or normal) is the same as i and I except that it stores the 32-bit integers in the output string in the native byte order of the machine where the Tcl script is running. To determine what the native byte order of the machine is, refer to the byteOrder element of the tcl_platform array.

w
  この形式は､６４ビット整数を､最下位バイトを先頭に並べる流儀(little-endian)で出力文字列に保存することを除いて c と同じである｡各数字の下位６４ビットが八バイト値として､遊走子の位置に､最下位バイトを先頭に保存される｡譬えば､ 　　　　 This form is the same as c except that it stores one or more 64-bit integers in little-endian byte order in the output string. The low-order 64-bits of each integer are stored as an eight-byte value at the cursor position with the least significant byte stored first. For example,

      binary format w 7810179016327718216

  は､文字列 HelloTcl を返す｡ will return the string HelloTcl

W
  この形式は､一つ以上の６４ビット整数を､最上位バイトを先頭に並べる流儀(big-endian)で出力文字列に保存することを除いて w と同じである｡譬えば､ 　　　　 This form is the same as w except that it stores one or more one or more 64-bit integers in big-endian byte order in the output string. For example,

      binary format Wc 4785469626960341345 110

  は最上位バイトを先頭に並べる流儀の文字列を返す 　　　 will return the string BigEndian

m
  この形式(w の見損ないいと憶えてくれ)は､６４ビットの整数を､Tclを実行している機械装置がバイトを並べる元来の順序で､出力文字列に保存することを除いて w 及び W と同じである｡機械装置がバイトを並べる元来の順序の指定は､ tcl_platform 配列変数の byteOrder 要素を参照されたい｡ This form (mnemonically the mirror of w) is the same as w and W except that it stores the 64-bit integers in the output string in the native byte order of the machine where the Tcl script is running. To determine what the native byte order of the machine is, refer to the byteOrder element of the tcl_platform array.

f
  この形式は､一つ以上の単精度の浮動小数を機械装置固有の表現で出力文字列に保存することを除いて､ c と同じである｡この表現は､装置構造毎に異なり､従って電網での､浮動小数の情報交換に使うべきではない｡浮動小数の長さも､装置構造に依存するので､生成されるバイトの個数も変動する｡もし､値が､装置固有の表現の限度を超えると､システムが 定義したFLT_MAXの値が､代わりに使用される｡ Tcl は､内部表現に倍精度浮動小数を使っているので､単精度に変換すると精度の損失がありえる｡譬えば､インテル社ペンティウム製品上で Windows が走っている系では､ 　　　 This form is the same as c except that it stores one or more one or more single-precision floating point numbers in the machine's native representation in the output string. This representation is not portable across architectures, so it should not be used to communicate floating point numbers across the network. The size of a floating point number may vary across architectures, so the number of bytes that are generated may vary. If the value overflows the machine's native representation, then the value of FLT_MAX as defined by the system will be used instead. Because Tcl uses double-precision floating point numbers internally, there may be some loss of precision in the conversion to single-precision. For example, on a Windows system running on an Intel Pentium processor,

      binary format f2 {1.6 3.4}

  は \xcd\xcc\xcc\x3f\x9a\x99\x59\x40 に等しい文字列を返す｡ will return a string equivalent to \xcd\xcc\xcc\x3f\x9a\x99\x59\x40.

r
  この形式(real と憶えてくれ)は､単精度の浮動小数を最下位バイトを先頭に並べる流儀(little-endian)で保存することを除いて f と同じである｡この変換のみが､ IEEE 浮動小数表現(よく使われるが､万国共通ではない)を使用する機械装置で使用したときに意味があるような出力を生成する｡ 　　　 This form (mnemonically real) is the same as f except that it stores the single-precision floating point numbers in little-endian order. This conversion only produces meaningful output when used on machines which use the IEEE floating point representation (very common, but not universal.)

R
  この形式は､単精度小数を､最上位バイトを先頭に並べる流儀(big-endian)で保存することを除いて r と同じである｡ 　　　 This form is the same as r except that it stores the single-precision floating point numbers in big-endian order.

d
  この形式は､一つ以上の倍精度の浮動小数を機械装置固有の表現で出力文字列に保存することを除いて､ f と同じである｡譬えば､インテル社ペンティウム製品上で Windows が走っている系では､ 　　　 This form is the same as f except that it stores one or more one or more double-precision floating point numbers in the machine's native representation in the output string. For example, on a Windows system running on an Intel Pentium processor,

      binary format d1 {1.6}

  \x9a\x99\x99\x99\x99\x99\xf9\x3f に等しい文字列を返す｡ will return a string equivalent to \x9a\x99\x99\x99\x99\x99\xf9\x3f.

q
  この形式(d の裏返しと憶えてくれ)は､倍精度の浮動小数を最下位バイトを先頭に並べる流儀(little-endian)で保存することを除いて d と同じである｡この変換のみが､ IEEE 浮動小数表現(よく使われるが､万国共通ではない)を使用する機械装置で使用したときに意味があるような出力を生成する｡ 　　　 This form (mnemonically the mirror of d) is the same as d except that it stores the double-precision floating point numbers in little-endian order. This conversion only produces meaningful output when used on machines which use the IEEE floating point representation (very common, but not universal.)

Q
  この形式は､倍精度小数を､最上位バイトを先頭に並べる流儀(big-endian)で保存することを除いて q と同じである｡ This form is the same as q except that it stores the double-precision floating point numbers in big-endian order.

x
  出力文字列に count 個の空文字を保存する｡もし count が指定されないと､一個の空文字が保存される｡ count が * であると不具合を生じる｡この型は､引数の消費が起らない｡譬えば､ 　　 Stores count null bytes in the output string. If count is not specified, stores one null byte. If count is *, generates an error. This type does not consume an argument. For example,

      binary format a3xa3x2a3 abc def ghi

  は､abc\000def\000\000ghi に等しい文字列を返す｡ will return a string equivalent to abc\000def\000\000ghi.

X
  出力文字列の中で､遊走子を count バイト後戻りさせる｡もし､count が * か､現在の遊走子の位置より大きいと､遊走子は 0 の位置に置かれるので､次に保存されるバイトは結果の文字列の第一バイトになる｡もし､count が省略されると遊走子は一バイト後戻りする｡この型は､引数の消費が起らない｡譬えば､ 　　 Moves the cursor back count bytes in the output string. If count is * or is larger than the current cursor position, then the cursor is positioned at location 0 so that the next byte stored will be the first byte in the result string. If count is omitted then the cursor is moved back one byte. This type does not consume an argument. For example,

      binary format a3X*a3X2a3 abc def ghi

  は､dghi を返す｡ will return dghi.

@
  遊走子を､出力文字列の count で指定された絶対的な位置に移動する｡位置0は､出力列の最初のバイトを示す｡もし､ count が保存してあるバイトの更に後方を指すと､初期化されていない領域にヌルバイトを置き､遊走子を指定された位置に置く｡もし､count が * であると､現在の出力列の末尾に移動する｡もし､count が省略されると､不具合が生じる｡この型は､引数の消費が起らない｡譬えば､ 　　　 Moves the cursor to the absolute location in the output string specified by count. Position 0 refers to the first byte in the output string. If count refers to a position beyond the last byte stored so far, then null bytes will be placed in the uninitialized locations and the cursor will be placed at the specified location. If count is *, then the cursor is moved to the current end of the output string. If count is omitted, then an error will be generated. This type does not consume an argument. For example,

      binary format a5@2a1@*a3@10a1 abcde f ghi j

  は､abfdeghi\000\000j に等しい文字列を返す｡ will return abfdeghi\000\000j.

### BINARY SCAN

この binary scan 命令は､二進列を解析し､変換を済ました数を戻す｡ 文字列 stringは調べ上げるべき入力バイトを与え(一文字につき一バイト､又､文字は高位のビットを削ったバイトで表現されるわけではない)､そして､ 書式指定 formatString は如何に調べるかを指示する｡各変数名 varName は､変数の名前を与え; 文字列 の欄枠を隅から隅に調べた結果が､対応する変数に代入(assign)される｡ 　　　 The binary scan command parses fields from a binary string, returning the number of conversions performed. String gives the input bytes to be parsed (one byte per character, and characters not representable as a byte have their high bits chopped) and formatString indicates how to parse it. Each varName gives the name of a variable; when a field is scanned from string the result is assigned to the corresponding variable.

binary format と同じ様に､ 書式指定 formatString は0個以上の空白で区切られた､0個以上の幾つかの隣接した欄枠規定子で構成される｡それぞれの欄枠欄規定子は一文字の型指定文字に必要に応じて旗標文字が続き､更に必要に応じて個数を表す数字 count が続く｡大多数の欄規定子は､一つの引数を費やして､調べ上げた結果をその中に入れる｡型指定文字は､値がどの様に書式化されるかを規定する｡個数 count は､値から指定した型の項目が幾つ取出せるかを示す｡個数 count の指定は非負の十進整数か､* か､であり､後者は､値の中から､項目を全て使用することを指定する｡もし､現在の遊走子の位置の後に､現在の欄枠規定子に見合うだけの十分なバイトが残っていないと､相当する変数は､手付かずに残り､binary scan は設定された変数の個数を伴って直ちに戻る｡もし､引数を消費している､書式文字列中の全ての欄枠に対応するだけの､十分な引数がないならば､不具合が生成される｡旗標の “u” は､その型を､符号なしに読むことにもなり得る｡その旗標は､全ての欄枠の型に付けられるが､非整数欄枠では無視される｡　　　　 As with binary format, the formatString consists of a sequence of zero or more field specifiers separated by zero or more spaces. Each field specifier is a single type character followed by an optional flag character followed by an optional numeric count. Most field specifiers consume one argument to obtain the variable into which the scanned values should be placed. The type character specifies how the binary data is to be interpreted. The count typically indicates how many items of the specified type are taken from the data. If present, the count is a non-negative decimal integer or *, which normally indicates that all of the remaining items in the data are to be used. If there are not enough bytes left after the current cursor position to satisfy the current field specifier, then the corresponding variable is left untouched and binary scan returns immediately with the number of variables that were set. If there are not enough arguments for all of the fields in the format string that consume arguments, then an error is generated. The flag character “u” may be given to cause some types to be read as unsigned values. The flag is accepted for all field types but is ignored for non-integer fields.

binary format と似た例でbinary scan 副命令での欄枠規定子と引数の関係が説明できる: 　　 A similar example as with binary format should explain the relation between field specifiers and arguments in case of the binary scan subcommand:

    binary scan $bytes s3s first second

この命令は(変数 bytes 中の二進列が十分長い限り)三つの整数のリストを変数 first に代入(assign)し､そして､一つの整数を変数 second に代入する｡もし､ bytes が八バイト(即ち､４個の２バイト整数)より少ないと､ second には何も代入されない､又､ bytes が６バイト(即ち､３個の２バイト整数)より少ないと､ first には何も代入されない｡そこで: 　　　 This command (provided the binary string in the variable bytes is long enough) assigns a list of three integers to the variable first and assigns a single value to the variable second. If bytes contains fewer than 8 bytes (i.e. four 2-byte integers), no assignment to second will be made, and if bytes contains fewer than 6 bytes (i.e. three 2-byte integers), no assignment to first will be made. Hence:

    puts [binary scan abcdefg s3s first second]
    puts $first
    puts $second

の印刷内容は(それ以前には､どの変数も実在しなかったと仮定する): 　　 will print (assuming neither variable is set previously):

    1
    25185 25699 26213
    can't read "second": no such variable

註意すべき重要な事柄として､ c と s と S (６４ビット系では更に i と I も)は､長い寸法のデータの値に持込む｡これらでは､最上位ビットが1になっている変数(文字では0x80 ､短整数では0x8000 整数では0x80000000)は符号が拡張される｡そこで､次の現象が起る: 　　 It is important to note that the c, s, and S (and i and I on 64bit systems) will be scanned into long data size values. In doing this, values that have their high bit set (0x80 for chars, 0x8000 for shorts, 0x80000000 for ints), will be sign extended. Thus the following will occur:

    set signShort [binary format s1 0x8000]
    binary scan $signShort s1 val; # val == 0xFFFF8000

もし､符号の付かない値を要求する場合は､欄枠の型に続けて “u” の旗標を含ませることができる｡譬えば､符号なし短値を読むには: 　　 If you require unsigned values you can include the “u” flag character following the field type. For example, to read an unsigned short value:

    set signShort [binary format s1 0x8000]
    binary scan $signShort su1 val; # val == 0x00008000

夫々の､型-個数 対は､現在の位置からバイトを読むに連れ､想像上の遊走子として二進列データの上を移動する｡最初は遊走子はデータの初めの 0 位置にある｡型は次の文字のどれか一つである: 　　　 Each type-count pair moves an imaginary cursor through the binary data, reading bytes from the current position. The cursor is initially at position 0 at the beginning of the data. The type may be any one of the following characters:

a
  データは長さ count のバイト列である｡もし､ count が * なら､string 中の残りの全てのバイトが変数に別けられる｡もし､count が省略されると､一バイトが調べられる｡調査される全てのバイトは､ \u0000-\u00ff の範囲の文字であると解釈されるので､もし､その文字列が二進列か ISO 8859-1 体系の文字番号にされた文字列かではない場合は､ encoding convertfrom 命令が必要になる｡譬えば､ 　　　 The data is a byte string of length count. If count is *, then all of the remaining bytes in string will be scanned into the variable. If count is omitted, then one byte will be scanned. All bytes scanned will be interpreted as being characters in the range \u0000-\u00ff so the encoding convertfrom command will be needed if the string is not a binary string or a string encoded in ISO 8859-1. For example,

      binary scan abcde\000fghi a6a10 var1 var2

  は､1 を戻すと共に､abcde\000 に等しい文字列を var1 に保存し､ var2 は変更されずに残される､又 　　　 will return 1 with the string equivalent to abcde\000 stored in var1 and var2 left unmodified, and

      binary scan \342\202\254 a* var1
      set var2 [encoding convertfrom utf-8 $var1]

  は､ var2 にユーロ通貨記号を保存する｡ 　　　 will store a Euro-currency character in var2.

A
  この形式は､変数に保存する前に､調査した値から､末尾の空白文字とヌル記号を切り捨てること以外は､ a と同じである､譬えば､ 　　　 This form is the same as a, except trailing blanks and nulls are stripped from the scanned value before it is stored in the variable. For example,

      binary scan "abc efghi  \000" A* var1

  は､1 を返し､abc efghi を var1 に保存する｡ will return 1 with abc efghi stored in var1.

b
  データは､下位-上位順の count 個の､文字 “1” と “0” の並びで表現される二進数文字列に換えられる｡データのバイトは､初めから終わりの順に､各バイトの中に下位-上位順に収納されているビットが走査される｡最後のバイトの余分なビットは無視される｡もし､count が * なら､文字列 中の残りの全てのビットが調査される｡もし､count が省略されると､一ビットが調べられる｡譬えば､ 　　　 The data is turned into a string of count binary digits in low-to-high order represented as a sequence of “1” and “0” characters. The data bytes are scanned in first to last order with the bits being taken in low-to-high order within each byte. Any extra bits in the last byte are ignored. If count is *, then all of the remaining bits in string will be scanned. If count is omitted, then one bit will be scanned. For example,

      binary scan \x07\x87\x05 b5b* var1 var2

  は､2 を返し､ var1 に 11100 が､ var2 に 1110000110100000 が保存される｡ will return 2 with 11100 stored in var1 and 1110000110100000 stored in var2.

B
  この形式は､ビットが各バイトに上位-下位の順に収納されていること以外は､b と同じである｡譬えば､ This form is the same as b, except the bits are taken in high-to-low order within each byte. For example,

      binary scan \x70\x87\x05 B5B* var1 var2

  は 2 を返し､ var1 に 01110 が､ var2 1000011100000101 が保存される｡ 　　　 will return 2 with 01110 stored in var1 and 1000011100000101 stored in var2.

H
  データは､上位-下位順の count 個の､ “0123456789abcdef” の中の文字の並びで表現される十六進の数字に換えられる｡データのバイトは､初めから終わりの順に､各バイトの中に上位-下位順に収納されている十六進数が走査される｡最後のバイトの余分なビットは無視される｡もし､ count が * なら､ 文字列 中の残りの全ての十六進数が調査される｡もし､count が省略されると､一個の十六進数が調べられる｡譬えば､ 　　　 The data is turned into a string of count hexadecimal digits in high-to-low order represented as a sequence of characters in the set “0123456789abcdef”. The data bytes are scanned in first to last order with the hex digits being taken in high-to-low order within each byte. Any extra bits in the last byte are ignored. If count is *, then all of the remaining hex digits in string will be scanned. If count is omitted, then one hex digit will be scanned. For example,

      binary scan \x07\xC6\x05\x1f\x34 H3H* var1 var2

  は､2 を返し､ var1 に 07c が､ var2 に 051f34 が保存される｡ will return 2 with 07c stored in var1 and 051f34 stored in var2.

h
  この形式は､数字が各バイトに逆順に(下位-上位)取込むこと以外は､H と同じである｡譬えば､ This form is the same as H, except the digits are taken in reverse (low-to-high) order within each byte. For example,

      binary scan \x07\x86\x05\x12\x34 h3h* var1 var2

  は､2 を返し､ var1 に 706 が､ var2 に 502143 が保存される｡ will return 2 with 706 stored in var1 and 502143 stored in var2.

  註意すべきは､殆どの場合､十六進数を多バイトから順に調査したい時は H 形式を使うべきである｡[訳註: 文字列$strng⇒十六進数列$hexcodeは､ binary scan [encoding convertto $strng] H* hexcode ;逆に､set str [encoding convertfrom [binary format H* $hexcode]] で文字列$strに戻る]　　 Note that most code that wishes to parse the hexadecimal digits from multiple bytes in order should use the H format.

c
  データは､下位-上位順の count 個の､八ビット符号付整数に換えられ､リストとして対応する変数に保存される｡もし､ count が * なら､ string 中の残りの全てのバイトが調査される｡もし､count が省略されると､一個の八ビット整数が調べられる｡譬えば､ 　　 The data is turned into count 8-bit signed integers and stored in the corresponding variable as a list. If count is *, then all of the remaining bytes in string will be scanned. If count is omitted, then one 8-bit integer will be scanned. For example,

      binary scan \x07\x86\x05 c2c* var1 var2

  は､2 を返し､ var1 に 7 -122 が､ var2 に 5 が保存される｡註意すべきは､戻ってくる整数は符号付きであるが､計算式 を使うと､次の様に､符号なし八ビット量に変換できる: 　　　 will return 2 with 7 -122 stored in var1 and 5 stored in var2. Note that the integers returned are signed, but they can be converted to unsigned 8-bit quantities using an expression like:

      set num [expr { $num & 0xFF }]

s
  データは count 個の､最下位バイトを先頭に並べる流儀(little-endian)で表現される１６ビット符号付整数として解釈される｡その整数はリストとして対応する変数に保存される｡もし､ count が * なら､ 文字列 string 中の残りの全てのバイトが調査される｡もし､count が省略されると､一個の１６ビット整数が調べられる｡譬えば､ 　　 The data is interpreted as count 16-bit signed integers represented in little-endian byte order. The integers are stored in the corresponding variable as a list. If count is *, then all of the remaining bytes in string will be scanned. If count is omitted, then one 16-bit integer will be scanned. For example,

      binary scan \x05\x00\x07\x00\xf0\xff s2s* var1 var2

  は､2 を返し､ var1 に 5 7 が､ var2 に -16 が保存される｡註意すべきは､戻ってくる整数は符号付きであるが､次の様に､expression を使うと､符号なし１６ビット量に変換できる: 　　 will return 2 with 5 7 stored in var1 and -16 stored in var2. Note that the integers returned are signed, but they can be converted to unsigned 16-bit quantities using an expression like:

      set num [expr { $num & 0xFFFF }]

S
  この形式は､データが count 個の､最上位バイトを先頭に並べる流儀(big-endian)で表現される１６ビット符号付整数として解釈されることを除いて s と同じである｡譬えば､ 　　 This form is the same as s except that the data is interpreted as count 16-bit signed integers represented in big-endian byte order. For example,

      binary scan \x00\x05\x00\x07\xff\xf0 S2S* var1 var2

  は､2 を返し､ var1 に 5 7 が､ var2 に -16 が保存される｡ 　　 will return 2 with 5 7 stored in var1 and -16 stored in var2.

t
  データは count 個の､Tcl 記述譜が実行されている機械装置の装置固有の順で表現される１６ビット符号付整数として解釈される｡それ以外は s と S と同じである｡装置固有のバイトを並べる順序の指定は､ tcl_platform 配列変数の byteOrder 要素を参照されたい｡ 　　　 The data is interpreted as count 16-bit signed integers represented in the native byte order of the machine running the Tcl script. It is otherwise identical to s and S. To determine what the native byte order of the machine is, refer to the byteOrder element of the tcl_platform array.

i
  データは count 個の､最下位バイトを先頭に並べる流儀(little-endian)で表現される３２ビット符号付整数として解釈される｡その整数はリストとして対応する変数に保存される｡もし､ count が * なら､ 文字列 中の残りの全てのバイトが調査される｡もし､count が省略されると､一個の３２ビット整数が調べられる｡譬えば､ 　　 The data is interpreted as count 32-bit signed integers represented in little-endian byte order. The integers are stored in the corresponding variable as a list. If count is *, then all of the remaining bytes in string will be scanned. If count is omitted, then one 32-bit integer will be scanned. For example,

      set str \x05\x00\x00\x00\x07\x00\x00\x00\xf0\xff\xff\xff
      binary scan $str i2i* var1 var2

  は､2 を返し､ var1 に 5 7 が､ var2 に -16 が保存される｡註意すべきは､戻される整数は符号付きであるが､次の様に､式を使うと､符号なし３２ビット量に変換できる: 　　 will return 2 with 5 7 stored in var1 and -16 stored in var2. Note that the integers returned are signed, but they can be converted to unsigned 32-bit quantities using an expression like:

      set num [expr { $num & 0xFFFFFFFF }]

I
  この形式は､データが count 個の､最上位バイトを先頭に並べる流儀(big-endian)で表現される３２ビット符号付整数として解釈されることを除いて I と同じである｡譬えば､ 　　　 This form is the same as I except that the data is interpreted as count 32-bit signed integers represented in big-endian byte order. For example,

      set str \x00\x00\x00\x05\x00\x00\x00\x07\xff\xff\xff\xf0
      binary scan $str I2I* var1 var2

  は､2 を返し､ var1 に 5 7 が､ var2 に -16 が保存される｡　　　 will return 2 with 5 7 stored in var1 and -16 stored in var2.

n
  データは count 個の､Tcl 記述譜が実行されている機械装置の装置固有の順で表現される３２ビット符号付整数として解釈される｡そこが i と I とは異なる｡装置固有のバイトを並べる順序の指定は､ tcl_platform 配列変数の byteOrder 要素を参照されたい｡ 　　　　　 The data is interpreted as count 32-bit signed integers represented in the native byte order of the machine running the Tcl script. It is otherwise identical to i and I. To determine what the native byte order of the machine is, refer to the byteOrder element of the tcl_platform array.

w
  データは､最下位バイトを先頭に並べる流儀(little-endian)で表現される､ count 個の６４ビット符号付整数として解釈される｡その整数はリストとして対応する変数に保存される｡もし､ count が * なら､文字列 string 中の残りの全てのバイトが調査される｡もし､count が省略されると､一個の６４ビット整数が調べられる｡譬えば､ 　　　 The data is interpreted as count 64-bit signed integers represented in little-endian byte order. The integers are stored in the corresponding variable as a list. If count is *, then all of the remaining bytes in string will be scanned. If count is omitted, then one 64-bit integer will be scanned. For example,

      set str \x05\x00\x00\x00\x07\x00\x00\x00\xf0\xff\xff\xff
      binary scan $str wi* var1 var2

  は､2 を返し､ var1 に 30064771077 が､ var2 に -16 が保存される｡註意すべきは､戻される整数は符号付きであり､Tcl では符号なし整数は表現できない｡ will return 2 with 30064771077 stored in var1 and -16 stored in var2. Note that the integers returned are signed and cannot be represented by Tcl as unsigned values.

W
  この形式は､データが count 個の､最上位バイトを先頭に並べる流儀(big-endian)で表現される６４ビット符号付整数として解釈されることを除いて w と同じである｡譬えば､ 　　　 This form is the same as w except that the data is interpreted as count 64-bit signed integers represented in big-endian byte order. For example,

      set str \x00\x00\x00\x05\x00\x00\x00\x07\xff\xff\xff\xf0
      binary scan $str WI* var1 var2

  は､2 を返し､ var1 に 21474836487 が､ var2 に -16 が保存される｡ will return 2 with 21474836487 stored in var1 and -16 stored in var2.

m
  データは count 個の､Tcl 記述譜が実行されている機械装置の装置固有の順で表現される６４ビット符号付整数として解釈される｡そこが w や W とは異なる｡装置固有のバイトを並べる順序の指定は､tcl_platform 配列変数の byteOrder 要素を参照されたい｡ 　　　 　 The data is interpreted as count 64-bit signed integers represented in the native byte order of the machine running the Tcl script. It is otherwise identical to w and W. To determine what the native byte order of the machine is, refer to the byteOrder element of the tcl_platform array.

f
  この形式は､機械装置固有の表現で count 個の､単精度の浮動小数として解釈される｡その浮動小数はリストとして対応する変数に保存される｡もし､ count が * なら､ string 中の残りの全てのバイトが調査される｡もし､count が省略されると､一個の浮動小数が調べられる｡浮動小数の長さも､装置構造に依存するので､調査されるバイトの個数も変動する｡もし､データが妥当な浮動小数を表現していないと､結果の値は定義されない､又これは機械翻訳に依存する｡譬えば､ペンチウム銘柄装置上で実行されているWindows系では､ 　　 The data is interpreted as count single-precision floating point numbers in the machine's native representation. The floating point numbers are stored in the corresponding variable as a list. If count is *, then all of the remaining bytes in string will be scanned. If count is omitted, then one single-precision floating point number will be scanned. The size of a floating point number may vary across architectures, so the number of bytes that are scanned may vary. If the data does not represent a valid floating point number, the resulting value is undefined and compiler dependent. For example, on a Windows system running on an Intel Pentium processor,

      binary scan \x3f\xcc\xcc\xcd f var1

  は､1 を返し､ var1 に 1.6000000238418579 が保存される｡ will return 1 with 1.6000000238418579 stored in var1.

r
  この形式は､データが count 個の､最下位バイトを先頭に並べる流儀(little-endian)で表現される､単精度浮動小数として解釈されることを除いて f と同じである｡この変換は､IEEE 式浮動小数を使わない少数派システムとは互換性がない｡ 　　 This form is the same as f except that the data is interpreted as count single-precision floating point number in little-endian order. This conversion is not portable to the minority of systems not using IEEE floating point representations.

R
  この形式は､データが count 個の､最上位バイトを先頭に並べる流儀(big-endian)で表現される､単精度浮動小数として解釈されることを除いて f と同じである｡この変換は､IEEE 式浮動小数を使わない少数派システムとは互換性がない｡ 　　 This form is the same as f except that the data is interpreted as count single-precision floating point number in big-endian order. This conversion is not portable to the minority of systems not using IEEE floating point representations.

d
  この形式は､データが機械装置固有の表現で count 個の､倍精度の浮動小数として解釈されることを除いて f と同じである｡譬えば､ペンチウム銘柄装置上で実行されているWindows系では､ 　　 This form is the same as f except that the data is interpreted as count double-precision floating point numbers in the machine's native representation. For example, on a Windows system running on an Intel Pentium processor,

      binary scan \x9a\x99\x99\x99\x99\x99\xf9\x3f d var1

  は､1 を返し､ var1 に 1.6000000000000001 が保存される｡ 　　 will return 1 with 1.6000000000000001 stored in var1.

q
  この形式は､データが count 個の､最下位バイトを先頭に並べる流儀(little-endian)で表現される､倍精度浮動小数として解釈されることを除いて d と同じである｡この変換は､IEEE 式浮動小数を使わない少数派システムには移植できない｡ 　　 This form is the same as d except that the data is interpreted as count double-precision floating point number in little-endian order. This conversion is not portable to the minority of systems not using IEEE floating point representations.

Q
  この形式は､データが count 個の､最上位バイトを先頭に並べる流儀(big-endian)で表現される､倍精度浮動小数として解釈されることを除いて d と同じである｡この変換は､IEEE 式浮動小数を使わない少数派システムには移植できない｡ 　　 　 This form is the same as d except that the data is interpreted as count double-precision floating point number in big-endian order. This conversion is not portable to the minority of systems not using IEEE floating point representations.

x
  文字列の中で､遊走子を count バイト先に進める｡もし､count が * か､現在の遊走子の位置の後ろのバイトの個数より大きいと､その遊走子は文字列 string の最後のバイトの後ろに移される｡もし､count が省略されると遊走子は一バイト進められる｡註意すべきは､この型は､引数の消費が起らない｡譬えば､ 　　　 Moves the cursor forward count bytes in string. If count is * or is larger than the number of bytes after the current cursor position, then the cursor is positioned after the last byte in string. If count is omitted, then the cursor is moved forward one byte. Note that this type does not consume an argument. For example,

      binary scan \x01\x02\x03\x04 x2H* var1

  は､1 を返し､ var1 に 0304 が保存される｡ will return 1 with 0304 stored in var1.

X
  文字列の中で､遊走子を count バイト後戻りさせる｡もし､count が * か､現在の遊走子の位置より大きいと､遊走子は0の位置に置かれるので､次に調査されるバイトは 文字列の第一バイトになる｡もし､count が省略されると遊走子は１バイト後戻りする｡この型は､引数の消費が起らない｡譬えば､ 　 Moves the cursor back count bytes in string. If count is * or is larger than the current cursor position, then the cursor is positioned at location 0 so that the next byte scanned will be the first byte in string. If count is omitted then the cursor is moved back one byte. Note that this type does not consume an argument. For example,

      binary scan \x01\x02\x03\x04 c2XH* var1 var2

  は､2 を返し､ var1 に 1 2 が､ var2 に 020304 が保存される｡ 　　　 will return 2 with 1 2 stored in var1 and 020304 stored in var2.

@
  遊走子を､データ文字列の count で指定された絶対的な位置に移動する｡註意すべきは､位置0は､ 文字列 string の最初のバイトを示す｡もし､ count が 文字列 string 末尾の更に後方を指すと､遊走子は最後のバイトの後方に移動する｡もし､count が省略されると､不具合が生じる｡譬えば､ 　　　 Moves the cursor to the absolute location in the data string specified by count. Note that position 0 refers to the first byte in string. If count refers to a position beyond the end of string, then the cursor is positioned after the last byte. If count is omitted, then an error will be generated. For example,

      binary scan \x01\x02\x03\x04 c2@1H* var1 var2

  は､2 を返し､ var1 に 1 2 が､ var2 に 020304 が保存される｡ 　　　 will return 2 with 1 2 stored in var1 and 020304 stored in var2.

### 互換性の問題 PORTABILITY ISSUES

r, R, q , Q 変換は､ IEEE 式浮動小数を利用している計算機同志の間でデータ交換をする場合のみ動作が信頼できる｡この方式は､非常によく使われているが､万国共通ではない｡全ての仕組みの装置間での浮動小数の移動には､(format により生成した如きの)文字の文章で表現する方式を利用されたい｡ 　　　 The r, R, q and Q conversions will only work reliably for transferring data between computers which are all using IEEE floating point representations. This is very common, but not universal. To transfer floating-point numbers portably between all architectures, use their textual representation (as produced by format) instead.

### 用例 EXAMPLES

これは､二進列-符号系の通信路に､ Tcl 文字列を､UTF-8 データとして､語の長さを前に付けて､書き出す､手続函数である: 　　　 This is a procedure to write a Tcl string to a binary-encoded channel as UTF-8 data preceded by a length word:

    proc writeString {channel string} {
        set data [encoding convertto utf-8 $string]
        puts -nonewline [binary format Ia* \
                [string length $data] $data]
    }

この手続函数は､前述の writeString 手続函数によって書き出された文字列を､通信路から読込む: This procedure reads a string from a channel that was written by the previously presented writeString procedure:

    proc readString {channel} {
        if {![binary scan [read $channel 4] I length]} {
            error "missing length"
        }
        set data [read $channel $length]
        return [encoding convertfrom utf-8 $data]
    }

(変数 filename 内に名前を付けた)ファイル の内容を base64 に変換し印刷する: This converts the contents of a file (named in the variable filename) to base64 and prints them:

    set f [open $filename rb]
    set data [read $f]
    close $f
    puts [binary encode base64 -maxlen 64 $data]

### SEE ALSO

encoding, format, scan, string, tcl_platform

### KEYWORDS

binary, format, scan
Copyright © 1997 Sun Microsystems, Inc.
Copyright © 2008 Donal K. Fellows