アドレスに x バイト量を書き込みたい場合、いくつかのオプションがあります。
void myfunction(void* address, size_t count, const unsigned char data[])
{..}
const unsigned char bytes[] = {0x10, 0x11, 0x12};
myfunction (address, 3, bytes);
ここで、2 番目の引数 count は配列の長さです。
または、可変個引数関数を使用:
void myfunction(void* address, size_t count, ...)
{..}
myfunction (address, 3, 0x10, 0x11, 0x12);
いずれの場合も、バイト数を明示的に指定する必要があります。コンパイラはデータからそれを推測できません。
ベクトルを使用する場合は可能ですが、関数を呼び出す前にまずベクトルを設定する必要があり、効率的ではありません。
自分でカウントを提供する必要がない唯一のケースは、値が 0 のバイトがない場合です。次のように記述できます。
void myfunction(void* address, const char* str)
{..}
myfunction (address, "\x10\x11\x12");
strlen! を使用できるからです。
編集:また、std::basic_string<unsigned char>
調べる価値があります。しかし、ここでも、これに値を含む値を与えることは簡単ではありません\x00
。