c - printf 原始数据到固定长度的十六进制输出

标签 c format hex printf

我有一个结构,指向一个结构的指针,我希望将前 n 个字节打印为一个长十六进制数,或者打印为一个十六进制字节的字符串。

本质上,我需要 printf 等同于 gdb 的检查内存命令 x/nxb 。

如果可能的话,我仍然希望将 printf 用作程序的记录器函数,只是它的一个变体。如果我可以在不循环访问数据的情况下这样做,那就更好了。

最佳答案

只是采纳了 Eric Postpischil 的建议并编写了以下内容:

struct mystruc
{
  int a;
  char b;
  float c;
};

int main(int argc, char** argv)
{
  struct mystruc structVar={5,'a',3.9};
  struct mystruc* strucPtr=&structVar;
  unsigned char* charPtr=(unsigned char*)strucPtr;
  int i;
  printf("structure size : %zu bytes\n",sizeof(struct mystruc));
  for(i=0;i<sizeof(struct mystruc);i++)
      printf("%02x ",charPtr[i]);

  return 0;
}

它会在结构拉伸(stretch)时尽可能快地打印字节。

更新:感谢 Eric 的洞察力 :) 我已经更新了代码。

关于c - printf 原始数据到固定长度的十六进制输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11992677/

相关文章:

c - 尝试使用指针在冒泡排序上编写程序时出现编译错误

c - 逐渐增加指针的地址

python - 将 bar_label 的格式更改为百分比

c - 如何在 C 中扫描特定的字符串格式?

wpf - 需要在动态构建的 WPF DataGrid 中格式化日期

在C中从十六进制字符串转换为字节数组

python - 使用Python从公钥获取RSA指数和模数

c - c中printf函数的修改

c - epoll_wait : maxevents

c - 从命令行参数C将十六进制转换为二进制