OctDump

gdb调试MySQL时,查看内存值,很多时候显示为8进制值
利用log协助调试时,log无法直接打印这些8进制的值,调试对比起来很不方便
下面参考了HexDump,实现很简单的OctDump功能,目的是打印格式与gdb调试所显示的格式相同

#include <iostream>
#include <string>
#include <cstring>
#include <cctype>

using namespace std;

std::string ToOct(const std::string& str1)
{
  std::string str2;

  for (char c : str1)
  {
    if (std::isprint(c))
    {
      str2.push_back(c);
    }
    else
    {
      str2.push_back('\\');
      str2.push_back((char)(((c & 0xc0) >> 6) + '0'));
      str2.push_back((char)(((c & 0x38) >> 3) + '0'));
      str2.push_back((char)((c & 0x07) + '0'));
    }
  }

  return str2;
}

int main()
{
  int v[4] = {1, 20, 3, 9};
  std::string str1((char*)(&v[0]), 16);

  std::string str2 = ToOct(str1);

  cout << "\"" << str2 << "\"" << endl;

  const char* cstr = "abc24, #";
  char* mstr = (char*)calloc(8, sizeof(char));
  memcpy(mstr, cstr, std::min<int>(8, strlen(cstr)));
  std::string str3 = ToOct(std::string(mstr, 8));
  cout << "\"" << str3 << "\"" << endl;
  free(mstr);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原...
    Manfred_Zone阅读 16,573评论 0 26
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,757评论 0 30
  • 1、文件和目录: # cd /home 进入 '/home' 目录 # cd .. ...
    XDgbh阅读 2,040评论 0 1
  • 题目链接戳这里像是单纯求凸包,其实不然. 题目的数据,并非题目所画的例子,我画了出来: 其实题目是求:求凸包的过程...
    无令便逐风阅读 336评论 0 0
  • 文 | 楂阿 01 他们的祖祖辈辈都扎根在这个海岛上,靠海为生,一代又一代的繁衍。海是他们的生命。 他们是从小一起...
    楂阿阅读 872评论 2 11