字符串排版化输出(左边十六进制,右边是对应字符)

将一段字符串排版化输出,左边是其十六进制显示,右边是字符显示。代码:

void print_file(const byte* debuff, int src_len, const char*file_path)
{
	std::ofstream file(file_path, std::ios::out|std::ios::app);
	if (file)
	{
		//file << "the " << g_nPacketCount << " packet" << std::endl; 

		for (int len = src_len; len>0; len-=8)//每8个字节一组
		{
			string s;
			string s2 = "           ";//间隔符
			if (len>=8)
			{
				for(int i=0; i<8; i++)
				{
					int index = src_len-len+i;
					string st = bytesToHexString(&debuff[index], 1);
					s.append(st);
					s.append(" ");
					if (debuff[index]==0x0a || debuff[index]==0x0d)//过滤掉字符串中的换行符
						s2.append(" ");							
					else
						s2.append(1, debuff[index]); 
				}
			} 
			else
			{
				s2.append((8-len)*3, ' ');
				for(int i=0; i<len; i++)
				{
					int index = src_len-len+i;
					string st = bytesToHexString(&debuff[index], 1);
					s.append(st); 
					s.append(" ");
					if (debuff[index]==0x0a || debuff[index]==0x0d)
						s2.append(" ");							
					else
						s2.append(1, debuff[index]); 
				}
			}
			file << s << s2;//输出到文件
			file << std::endl;
		}

		file << std::endl << std::endl ;
		file.close();
	}

}

 

string BytesToHexString(const byte *in, size_t size) {
 string str;
 for (size_t i = 0; i < size; ++i) {
  int t = in[i];
  int a = t / 16;
  int b = t % 16;
  str.append(1, IntToHexChar(a));
  str.append(1, IntToHexChar(b));
  if (i != size - 1)
   str.append(1, ' ');
 }
 return str;
}
char IntToHexChar(int x) {
 static const char HEX[16] = {
  '0', '1', '2', '3',
  '4', '5', '6', '7',
  '8', '9', 'A', 'B',
  'C', 'D', 'E', 'F'
 };
 return HEX[x];
}

std::string gstr_file_path = argv[1];   //gstr_key = argv[2];

  size_t pos = gstr_file_path.rfind(".");   string st = gstr_file_path.substr(0,pos+1);   st.append("txt");   gstr_file_path = st;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值