博文连接:c++
如下是我根据博文修改格式出来的一个方法:socket
string* byteArray2HexStr(char* charArr, int len) { string* strRetVal = new string(); for (int i = 0; i < len; i ++) { char char1; char char2; int iVal = charArr[i]; int iVal1 = iVal / 16; int iVal2 = iVal % 16; if (iVal1 >= 0 && iVal1 <= 9) { char1 = (char)(48 + iVal1); } else { char1 = (char)(55 + iVal1); } if (iVal2 >= 0 && iVal2 <= 9) { char2 = (char)(48 + iVal2); } else { char2 = (char)(55 + iVal2); } *strRetVal = *strRetVal + char1 + char2; } return strRetVal; }刚找到这个东西的时候仍是挺开心的,想到之后调试数据会方便些了。
没想到昨天在调一个 bug 的时候居然中招了。测试
活生生将一个字节数组转换成了错误的十六进制字符串,而后我在作数据对比的时候,让我怀疑是在 bsd socket 的 recv() 方法出现了问题。spa
还特地发了一个帖子去向别人请教这个异常奇葩的问题:.net
详情请看帖子,其余就很少吐槽了,下面给出一个 “不可靠” 的例证:code
#include <string> #include <stdio.h> #include "HexUtil.h" using namespace std; /** * 执行结果为: * e3 转换结果为:6* */ int main(int argc, const char * argv[]) { int i = 0xE3; unsigned char t_pArrChar[1]; t_pArrChar[0] = (unsigned char)i; string* str = byteArray2HexStr(t_pArrChar, 1); printf("%x 转换结果为:%s\n", i, str->c_str()); }最后,总结一下:
网上现成的东西,本身拿过来用以前,要记得先作一下测试,检验一下牢固程度。blog