c的char*缓冲区的Python样式repr?

joh*_*les 5 c python repr

在大多数情况下,我使用Python工作,因此我对repr()函数表示了极大的赞赏,当传递一串任意字节时,它将打印出人类可读的十六进制格式.最近我一直在用C做一些工作,我开始想念python repr函数.我一直在互联网上寻找与它类似的东西,最好是类似的东西void buffrepr(const char * buff, const int size, char * result, const int resultSize)但我没有运气,是否有人知道这样做的简单方法?

Jos*_*itt 1

sprintf(char*, "%X", b);

你可以像这样循环(非常简单):

void buffrepr(const char * buff, const int size, char * result, const int resultSize)
{
  while (size && resultSize)
  {
    int print_count = snprintf(result, resultSize, "%X", *buff); 
    resultSize -= print_count;
    result += print_count;
    --size;
    ++buff;

    if (size && resultSize)
    {
      int print_count = snprintf(result, resultSize, " ");
      resultSize -= print_count;
      result += print_count;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • `sprintf` 很糟糕。使用 `snprintf` 代替。 (2认同)
  • 这很有效,但请注意,要让它在 Windows 上编译,您需要添加诸如“#ifdef WIN32\n#define snprintf _snprintf\n#endif”之类的内容,微软似乎喜欢重命名函数! (2认同)