C语言变参函数实现打印SOCKET接收的数据报文,该怎么处理

C语言变参函数实现打印SOCKET接收的数据报文
MyPrint(DEBUG_INFO,"接收%d个字节数据\n“,DataLength);
MyPrint(DATA_INFO,"Recv:",Data,DataLength);

如果:Data = {0x10,0x22,0x34,0x56};DataLength = 4
输出效果:接收4个字节的数据
                  Recv:10 22 34 56 
请问如何实现?
------解决思路----------------------

#include<stdio.h>
#include<stdarg.h>

typedef enum
{
DEBUG_INFO,
DATA_INFO
} MyPrintArg;

void MyPrint(MyPrintArg type,const char *format,...)
{
va_list args;
unsigned char* data;
int datalen;
va_start(args,format);
switch(type)
{
case DEBUG_INFO:
vprintf(format,args);
break;
case DATA_INFO:
printf("%s",format);
data=va_arg(args,unsigned char*);
datalen=va_arg(args,int);
while(datalen--)
printf("%02x ",*data++);
break;
default:
break;
}
va_end(args);
}

int main()
{
unsigned char x[]={1,2,3,4,5,16,32,254,255};
int datalen=sizeof x;
MyPrint(DEBUG_INFO,"size of x is:%d\n",datalen);
MyPrint(DATA_INFO,"Recv:",x,datalen);
return 0;
}