バイナリから 16 進への変換には、通常ルーチンと再入可能ルーチンの 2 種類のルーチンがあります。どちらのルーチンも、変換後の文字列へのポインタを返します。また、渡された認可上限が bclear_t 型でなければ NULL を返します。
次の例は、バイナリのプロセス認可上限を 16 進に変換し、再び元に戻します。
#include <tsol/label.h> main() { int retval; bclear_t hclear; char *string ; retval = getclearance(&hclear); if((string = bcleartoh(&hclear)) != 0) printf("Hex string = %s¥n", string); retval = htobclear(string, &hclear); printf("Return Value = %d¥n", retval); }
最初の printf(1) 文により、バイナリの認可上限が次のように 16 進形式で出力されます。
0xClearance hexadecimal value
2 番目の printf 文により、次のように出力されます。0 以外は、変換が成功したことを示します。
Return Value = 1
再入可能 (MT - 安全、マルチスレッドに対して安全) ルーチン bcleartoh_r(3) は、返される値に対する記憶領域の割り当てと開放を必要とします。h_alloc(3) ルーチンは、変換されるラベルの型 (この場合は 16 進形式) にあわせて適切なサイズの記憶領域を割り当てるのに使用されます。
型が 16 進値である場合は、定義された認可上限 (SUN_CLR_ID) が 16 進に変換されることを表します。
次の例は、変換の型に対し記憶領域を割り当て、バイナリのプロセス認可上限を 16 進に変換し、最後に記憶領域を解放します。
#include <tsol/label.h> main() { bclear_t hclear; char *string, *hex; getclearance(&hclear); hex = h_alloc(SUN_CLR_ID); if((string = bcleartoh_r(&hclear, hex)) != 0); printf("Hex string = %s¥n", string); h_free(hex); }
printf(1) 文により、次のように 16 進形式でバイナリ認可上限が出力されます。
Hex string = 0x0006cc0000000000000000000000000000000000000 000000003ffffffffffff0000 |