-
int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags) -
整数
valを、wordsとnumwordsで指定したバッファに書き出します。書き出す形式はwordsize、nails、flagsで指定します。flagsにINTEGER_PACK_2COMPを指定すると 2 の補数表現で書き出します。指定しないとvalの絶対値を書き出し、符号は返り値で返します。あふれたときは、バッファには下位のワードが書き出されます。- [PARAM]
val: -
書き出す整数です。
to_intメソッドを持つオブジェクトでも構いません。 - [PARAM]
words: - 書き出し先のバッファです。
- [PARAM]
numwords: -
wordsのワード数です。 - [PARAM]
wordsize: - 1 ワードあたりのバイト数です。
- [PARAM]
nails: -
1 ワードあたりの詰め物のビット数です。各ワードの上位
nailsビットは 0 で埋められます。 - [PARAM]
flags: -
INTEGER_PACK_で始まる定数の論理和です。 - [RETURN]
- 符号とあふれの状態です。
- [EXCEPTION]
TypeError: -
valがto_intメソッドを持たないとき。
flagsに指定できる主な定数は次のとおりです。INTEGER_PACK_MSWORD_FIRST-- 最上位のワードを先頭に書き出します。INTEGER_PACK_LSWORD_FIRST-- 最下位のワードを先頭に書き出します。INTEGER_PACK_MSBYTE_FIRST-- ワード内の最上位のバイトを先頭に書き出します。INTEGER_PACK_LSBYTE_FIRST-- ワード内の最下位のバイトを先頭に書き出します。INTEGER_PACK_NATIVE_BYTE_ORDER-- 実行環境のバイト順に合わせて、INTEGER_PACK_MSBYTE_FIRSTかINTEGER_PACK_LSBYTE_FIRSTのどちらかになります。INTEGER_PACK_2COMP-- 2 の補数表現を使います。INTEGER_PACK_LITTLE_ENDIAN--INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_LSBYTE_FIRSTの省略形です。INTEGER_PACK_BIG_ENDIAN--INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_MSBYTE_FIRSTの省略形です。INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION-- 汎用の実装を使います。テストとデバッグ用です。
INTEGER_PACK_2COMPを指定しないときの返り値は次のとおりです。ここでNはnumwords*(wordsize*CHAR_BIT-nails)です。-2-- 負の数であふれました。val <= -2**Nです。-1-- 負の数で、あふれていません。-2**N < val < 0です。0--valは 0 です。1-- 正の数で、あふれていません。0 < val < 2**Nです。2-- 正の数であふれました。2**N <= valです。
INTEGER_PACK_2COMPを指定したときは、-2がval < -2**N、-1が-2**N <= val < 0になり、ほかは同じです。-2**Nは 2 の補数表現では表せますが絶対値では表せないため、INTEGER_PACK_2COMPを指定したときは-1を、指定しないときは-2を返します。