在c中打印十六进制字符给出奇怪的输出

时间:2013-09-28 16:39:15

标签: c printf scanf hex

我有一个网络捕获工具,可以捕获数据包并对其进行一些处理。现在,这是代码的一小部分。 u_charunsigned char的名称。当我尝试将变量smac打印到stdout时,我得到的只是000000000000在屏幕上。我想打印实际的smacdmac

char * str;
char converted[6*2 + 1];
u_char smac[6], dmac[6];
int i;

if (ntop_lua_check(vm, __FUNCTION__, id, LUA_TSTRING)) 
  return(CONST_LUA_PARAM_ERROR);

if ((str = (char*)lua_tostring(vm, id)) == NULL)  
  return(CONST_LUA_PARAM_ERROR);

sscanf(str, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
       &smac[0], &smac[1], &smac[2], &smac[3], &smac[4], &smac[5]);

for (i = 0; i < 6; i++)
{
  sprintf(&converted[i*2], "%02X", smac[i]);
}

printf("%s\n", converted);

无符号字符的问题是否被int提升为sprintf或者某些东西并打印出不必要的两个字节?我不确定。任何帮助都会很有价值。谢谢。

0 个答案:

没有答案