随手在网上找了一段将字节数组转换为十六进制字符串的代码,结果被坑惨了
2023-09-27 14:22:41 时间
博文链接:
以下是我根据博文修改格式出来的一个方法:
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() 方法出现了问题。
还特意发了一个帖子去向别人请教这个异常奇葩的问题:
详情请看帖子,其他就不多吐槽了,下面给出一个 “不可靠” 的例证:
#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()); }
最后,总结一下:
网上现成的东西,自己拿过来用之前,要记得先做一下测试,检验一下牢固程度。
相关文章
- python中,如何将字符串转换为数字(将数字转换为整型),字符串的10转换为整型的10,10.5转换为10
- Word处理控件Aspose.Words功能演示:使用 C# VB.NET 将 DOCX 转换为 DOC 或将 DOC 转换为 DOCX
- WGS84,GCJ02, BD09坐标转换
- LigerUi-js中ajax前台调用后台Json格式转换!(已解决)
- 关于postgresql:将字符串转换为整数-Postgres
- 系统学习JAVA第十七天(字节流、字符流、缓冲的字节流、缓冲的字符流、将字节流转换为缓冲的字符流、面向对象——>字节流转成对象)
- RGB,CMYK,HSB各种颜色表示的转换 C#语言
- java 字节→字符转换流
- web网页简繁汉字转换
- 将float转换为数据类型numeric时出现算术溢出错误
- SQL Server 取日期时间格式 日期与字符串之间的转换
- 字符和字节详解、Java中字节串和字符串相互转换
- JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换
- Error at “paper.tex“ (line 23, column 10): expecting end{document} end{CJK}-pandoc转换tex文件为doc文件问题
- 无论传入什么数据都转换为列表
- Java //PP2.6 编写一个应用程序,将英里转换为千米(1英里等于1.60935千米)。以浮点数类型读取用户输入的英里数