Skip to content

Latest commit

 

History

History
209 lines (140 loc) · 3.47 KB

File metadata and controls

209 lines (140 loc) · 3.47 KB

Datový typ binary!

1. Úvodem

Hodnota binary! je tvořena řadou číselných znaků zvolené číselné soustavy - nikoliv jak název napovídá - pouze dvojkové soustavy.

Typ binary! je člen typesetů default! a series!

2. Vytvoření

Hodnoty typu binary lze vytvořit s použitím literálové syntaxe nebo při runtime s použitím konstruktoru make nebo konverzí to.

2.1. Literálová skladba

Obecné schema deklarace:

<binary-literal> ::=  2#{<base2-char>*} |
                     16#{<hex-char>*} OR #{<hex-char>*} |
                     64#{<base64-char>*}

Hodnota base2 se skládá z jedné či více skupin osmi číslic 0-1. Skupiny lze oddělovat mezerou

>> 2#{11111111}
== #{FF}

>> 2#{11110000 00001111}
== #{F00F}

Hodnota base16 je hexadecimální formát čísla a skládá se ze dvou znaků či skupin dvou znaků 0-9 A-F a-f

>> 16#{2A}
== #{2A}

>> 16#{2A FF}
== #{2AFF}

Tento formát je implicitní a lze jej psát i bez označení báze.

>> #{2A}
== #{2A}

Lichý počet znaků vyvolá chybu:

>> 16#{2AF}
*** Syntax Error: invalid binary! at "#{2AF}"
*** Where: do
*** Stack: load

Hodnota base64 se skládá ze čtyř znaků nebo ze skupin čtyř znaků z množiny 0-9 A-Z a-z +/.

>> 64#{2AQQ}
== #{D80410}

>> 64#{2A+/}
== #{D80FBF}

Méně než čtyři znaky nebo lichý počet znaků vyvolá chybu. Potřebnou délku lze vytvořit doplněním (maximálně) dvěma rovnítky =.

>> 64#{2A}
*** Syntax Error: invalid binary! at "64#{2A}"
*** Where: do
*** Stack: load

>> 64#{2A2=}
== #{D80D}

>> 64#{D75q31==}
== #{0FBE6ADF}

2.2. Vytvoření v režimu runtime


Použití make:

>> make binary! [42]
== #{2A}

Konverze to:

>> to binary! 42
== #{0000002A}

>> to-binary "I"
== #{49}

>> to string! #{49}
== "I"

3. Související funkce

3.1. enbase

>> help enbase

USAGE:
     ENBASE value

DESCRIPTION:
     Encodes a string into a binary-coded string (BASE-64 default).
     ENBASE is a native! value.

ARGUMENTS:
     value        [binary! string!] "If string, will be UTF8 encoded."

REFINEMENTS:
     /base        => Binary base to use.
        base-value   [integer!] "The base to convert from: 64, 58, 16, or 2."
>> enbase/base "I" 64
== "SQ=="

>> enbase "I"             ; báze 64 je pro funkci enbase implicitní
== "SQ=="

3.2. debase

>> help debase

USAGE:
     DEBASE value

DESCRIPTION:
     Decodes binary-coded string (BASE-64 default) to binary value.
     DEBASE is a native! value.

ARGUMENTS:
     value        [string!] "The string to decode."

REFINEMENTS:
     /base        => Binary base to use.
        base-value   [integer!] "The base to convert from: 64, 58, 16, or 2."
>> debase "SQ=="
== #{49}
>> debase/base "SQ==" 64
== #{49}

>> to string! debase/base "SQ==" 64
== "I"

4. Komparace

Na hodnotu typu binary! lze aplikovat všechny komparační operátory: =, ==, <>, >, <, >=, <=, =?. Navíc jsou podporovány funkce min a max.

5. Ověřování hodnot

Přímým dotazem:

>> binary? #{2A}
== true

Obecným dotazem:

>> type? #{2A}
== binary!

6. Předdefinovaná slova

6.1. Akce

complement, or~, put, read, trim, write, xor~

6.2. Funkce

binary?, load, read-thru, save, to-binary

6.3. Nativa

call, checksum, debase, decompress, enbase, parse

6.4. Operátory

and, or, xor