# OS_VSNPrintfEx

## 構文

  `#include <nitro/os.h>
  int OS_VSNPrintfEx( char *dst, size_t len, const char *fmt, va_list vlist );
  `

## 引数

dst | 出力文字列の格納先バッファ
len | 出力文字列の格納先バッファのサイズ
fmt | 出力書式文字列(フォーマット文字列)
vlist | 可変引数リスト

## 返り値

常に、書式文字列を正しく出力した場合の文字数を返します。この文字数に終端文字 '\0' は含まれません。

dst には出力文字列が書き込まれます。
出力文字数が len を下回る場合、全ての文字列と終端文字 '\0' が書き込まれます。
出力文字数が len と同じかそれを上回る場合、
(1) len が 0 でなければ dst[len - 1] に 終端終端文字 '\0' を書き込みます。
(2) len が 0 であれば dst に対して何も行ないません。

## 説明

軽量版の書式文字列関数です。`OS_VSNPrintf()`を機能拡張したものであり、標準でない変換指定子に対応しています。 現在対応しているものは以下になります。

- b,B :

  > 引数で指定された unsigned char 型配列の要素を符号なし16進数に変換します。b では abcdef、B では ABCDEF が使用されます。b,Bの前に精度を指定することができます。精度で指定されたバイト数が表示され、 . （ピリオド）を指定した場合は続けて指定されたバイト数で改行されるようになります。精度が指定されていない場合は1バイトのみ出力されることになります。またフラグ文字として % の後ろに空白、もしくは : （コロン）を加えることで1バイト毎に空白、もしくは : が出力されるようになります。

  > 例：

  > `OS_TPrintfEx("%:6.3B\n", mac_address);
  > ` ↓
  > 00:09:BF<改行>12:34:56

この関数は weak シンボルでコンパイルされますので、ユーザが独自で関数を定義すれば、それで上書きされます。
但しこの関数は、TWL-SDK 内の関数や上位ライブラリ、ミドルウェアなどで使用されている可能性がありますので、
上書きする場合は動作が変わらないように十分注意してください。

## 参照

`OS_VSNPrintf
`

## 履歴

2009/03/27 ユーザが独自で関数を定義した場合の注意を追記
2006/10/23 初版