hex编码问题

asmemgsd 2011-05-01 04:00:25
15,BYTE数据转HEX编码
int ByteArrToHexStr(char * lpszHexStr, unsigned char const * lpuzBuffer, int nBuffCount);
调用结果如:
unsigned char arr[] = {0xa1, 0xb2, 0xc3 ,0xd4, 0xf5};
char text[100];
ByteArrToHexStr(text, arr, sizeof(arr)/sizeof(*arr));
printf("%s\n", text); // 输出A1B2C3D4F5

这样的一道题,我做的时候这样做:
int ByteArrToHexStr(char * lpszHexStr, unsigned char const * lpuzBuffer, int nBuffCount)
{
int nCount = 0;
while (*(lpuzBuffer++) != '\0')
++nCount;

return 0;
}
到了这里就有点奇怪,为什么nCount会是19?
0xa1在unsigned char中是怎么表示的?不能以'\0'来判断结尾?
...全文
227 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
asmemgsd 2011-05-01
  • 打赏
  • 举报
回复
int ByteArrToHexStr(char * lpszHexStr, unsigned char const * lpuzBuffer, int nBuffCount)
{
int nCur = 0;
char A = {0};
while (nCur < nBuffCount)
{
A=*(lpuzBuffer+nCur) / 16;
if (A > 9 )
A = A-10+'A';
else
A = A+'0'
*(lpszHexStr+2*nCur) = A;

A = *(lpuzBuffer+nCur) % 16;
if (A > 9 )
A = A-10+'A';
else
A = A+'0';
*(lpszHexStr+2*nCur+1) = A;

++nCur;
}
return 1;
}

做出来了,谢谢楼上几位大侠,结贴
shujuhuifu802 2011-05-01
  • 打赏
  • 举报
回复
sizeof在编译期由编译器计算完成,是静态的,所以,在定义unsigned char arr[] = {0xa1, 0xb2, 0xc3 ,0xd4, 0xf5};的时候,就决定了 sizeof(arr)==5(即使数组里定义的是'\0')
如果在定义数组时不加\0,引用时就一定要小心,*(lpuzBuffer++) != '\0'就可能越界。
老邓 2011-05-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 asmemgsd 的回复:]

unsigned char arr[] = {0xa1, 0xb2, 0xc3 ,0xd4, 0xf5};
char text[100];
ByteArrToHexStr(text, arr, sizeof(arr)/sizeof(*arr));
printf("%s\n", text);
为什么里的sizeof(arr)就是5,而我
while (*(lpuzBuffer++) !=……
[/Quote]
sizeof是语法上确定占据内存空间的大小。
而你的循环是确定字符串长度。
字符串以0x00结尾。
asmemgsd 2011-05-01
  • 打赏
  • 举报
回复
unsigned char arr[] = {0xa1, 0xb2, 0xc3 ,0xd4, 0xf5};
char text[100];
ByteArrToHexStr(text, arr, sizeof(arr)/sizeof(*arr));
printf("%s\n", text);
为什么里的sizeof(arr)就是5,而我
while (*(lpuzBuffer++) != '\0')
++nCount;
这样写为什么又不是5呢?sizeof不是以'\0'为结束的吗
asmemgsd 2011-05-01
  • 打赏
  • 举报
回复
要上自己加上了0x00,结果是没错nCount是5,可是不加为什么结果会是19呢
老邓 2011-05-01
  • 打赏
  • 举报
回复
unsigned char arr[] = {0xa1, 0xb2, 0xc3 ,0xd4, 0xf5, 0x00};
把上红色部分,再看结果?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧