怎么用printf输出2个字节的十六进制数

如何用printf输出2个字节的十六进制数?
如何用printf输出2个字节的十六进制数?
比如有char数组有4个字节0x01 0x02 0x03 0x04,用printf一个个输出我会。
但是如何联系输出为0x0102 0x0304呢
还有办法输出0x01020304吗?

我用的是printf("0x%02x\n",charstr[i]);

当然是可以
printf("0x%02x02x\n",charstr[i++],charstr[i]);
应该就能输出0x0102了。
请问有没有更好的办法?

------解决方案--------------------
C/C++ code
    char msg[]={0x01,0x02,0x03, 0x04};
    for(i=0;i*2<3;i++)
    {
        printf("0x%02x%02x\n",msg[i*2],msg[i*2+1]);
    }