随手在网上找了一段将字节数组转换为十六进制字符串的代码,结果被坑惨了
2013-07-24 14:30
330 查看
博文链接:
c++ byte类型数组转十六进制字符串的几种代码实现
以下是我根据博文修改格式出来的一个方法:
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() 方法出现了问题。
还特意发了一个帖子去向别人请教这个异常奇葩的问题:
bsd socket 接收缓冲长度不够时接收出错的问题
详情请看帖子,其他就不多吐槽了,下面给出一个 “不可靠” 的例证:
#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());
}最后,总结一下:
网上现成的东西,自己拿过来用之前,要记得先做一下测试,检验一下牢固程度。
c++ byte类型数组转十六进制字符串的几种代码实现
以下是我根据博文修改格式出来的一个方法:
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() 方法出现了问题。
还特意发了一个帖子去向别人请教这个异常奇葩的问题:
bsd socket 接收缓冲长度不够时接收出错的问题
详情请看帖子,其他就不多吐槽了,下面给出一个 “不可靠” 的例证:
#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());
}最后,总结一下:
网上现成的东西,自己拿过来用之前,要记得先做一下测试,检验一下牢固程度。
相关文章推荐
- 随手在网上找了一段将字节数组转换为十六进制字符串的代码,结果被坑惨了
- 随手在网上找了一段将字节数组转换为十六进制字符串的代码,结果被坑惨了
- 我也分享一个字节数组到十六进制字符串互相转换
- MSDN将字节数组转换为十六进制值字符串时 Byte 的用法
- 字节数组、数值和十六进制字符串的转换
- 如何将字节数组转换为十六进制的字符串
- C#字节数组与字符串相互转换代码案例
- 字节数组、数值和十六进制字符串的转换
- 将字节数组转换为十六进制值字符串时 Byte 的用法
- MSDN将字节数组转换为十六进制值字符串时 Byte 的用法
- 字节数组和字符串按十六进制互相转换
- JavaScript十六进制字符串和字节数组相互转换
- 字节数组和字符串按十六进制互相转换
- .NET编程 -- 字节数组、数值和十六进制字符串的转换
- 字节数组、数值和十六进制字符串的转换
- JavaScript十六进制字符串和字节数组相互转换
- 将字节数组转换为十六进制字符串
- JavaScript十六进制字符串和字节数组相互转换
- 主题:Java整数-字节,字节-字符,字节数组-十六进制字符串转换
- java 中字节数组与十六进制字符串及普通字符串之间的转换