谢谢,只能用函数来解决了
#define SETBYTE(n,d) n,(UCHAR)d
//////////////////////////////////////////////////////////////////////////
// 初始化数组,不作越界检测
VOID InitData(UCHAR* data, ...)
{
STRUCT(_setbyte)
{
INT n;
INT d;
};
vector<_setbyte> vec_sb;
vec_sb.clear();
_setbyte sb;
va_list marker;
va_start( marker, data ); /* Initialize variable arguments. */
do
{
sb.n = va_arg(marker, INT);
sb.d = va_arg(marker, INT);
//Output::DbgStr(TEXT("%p,%p"), sb.n, sb.d);
if (sb.n>0 && sb.n<100000 && sb.d<256)
vec_sb.push_back(sb);
else
break;
} while (TRUE);
va_end( marker ); /* Reset variable arguments. */
UINT nPos = 0;
vector<_setbyte>::iterator psb = vec_sb.begin();
while (psb != vec_sb.end())
{
//Output::DbgStr(TEXT("%p,%02x"), psb->n, psb->d);
FillMemory(data+nPos, psb->n, psb->d);
nPos += psb->n;
//
psb++;
}
}
//////////////////////////////////////////////////////////////////////////
UCHAR data[16];
Common::InitData(data, SETBYTE(2,6), SETBYTE(3,4), SETBYTE(4,8), SETBYTE(1,9), SETBYTE(sizeof(data)-10,0xb));
TCHAR buffer[100];
for (int i=0; i<16; i++)
{
StringCchPrintf(buffer+i*3, 4, TEXT("%02x "), data[i]);
}
Output::DbgStr(buffer);