将网络字节流转换为十六进制显示

class HexStream
{
public:
	HexStream(const std::string &path)
	{
		if (0 != fopen_s(&fp_, path.c_str(), "a+")) {
			fp_ = NULL;
		}
	}

	~HexStream()
	{
		fclose(fp_);
	}

	void write(unsigned char *arr, size_t len)
	{
		if (fp_) {
			std::string hex(len * 3, '\0');
			int pos = 0;
			for (size_t i=0; i<len; i++) {
				pos += sprintf(&hex.front() + pos, "%02X ", arr[i]);
			}

			time_t curtime = time(0); 
			tm tim;
			localtime_s(&tim, &curtime);

			char title[128];
			static int s_num = 0;
			sprintf(title, "\r\n%d/%02d/%02d %02d:%02d:%02d recv buffer num:%d, len:%d\r\n", tim.tm_year+1900, tim.tm_mon+1,
				tim.tm_mday, tim.tm_hour, tim.tm_min, tim.tm_sec, ++s_num, len);
			fwrite(title, 1, strlen(title), fp_);

			pos = hex.size();
			int begin = 0;
			int line = 120;
			while (begin<pos) {
				fwrite(&hex.front() + begin, 1, min(pos-begin, line), fp_);
				fwrite("\r\n", 1, 2, fp_);
				begin += line;
			}
			fflush(fp_);
		}
	}

private:
	FILE *fp_;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值