我这有个函数看不明,望指教

shuitamen 2014-09-18 08:46:31

ulong ulStrToLong(const uchar *psBinString,ushort uSlength)
{
ulong l;
ushort i;
for(i=0,l=0l;i<uSlength;i++)
l = l*256 + (long)psBinString[i];
return(l);
}


函数的注释是将二进制串转成长整形,但不清楚其原理,望指教
...全文
410 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-09-24
  • 打赏
  • 举报
回复
引用 7 楼 u010211892 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:] 代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
赵老师,我好想举报你,永远在复制粘贴!!![/quote] 我好想举报整个IT界,永远在使用冯诺依曼架构。
lsjfdjoijvtghu 2014-09-23
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
赵老师,我好想举报你,永远在复制粘贴!!!
Marcelxx 2014-09-23
  • 打赏
  • 举报
回复
感觉你这个不是2进制转换器,而是256进制转换器。l = l*256 + (long)psBinString[i];中的256是等于多少进位的数,进几进制数,比如1*10+2,就是十进制转换。二进制转换器应该是l = l*2+ (long)psBinString[i]; 你的二进制字符串是:"1100"这种么,其中的每个数字就是一个二进制位,还是???
MMinus 2014-09-18
  • 打赏
  • 举报
回复
引用 2 楼 shuitamen 的回复:
[quote=引用 1 楼 MisteryMethod 的回复:] psBinString[n] 是一个UCHAR 0x00000000 占用8bit 所以每次偏移一个UCHAR 就需要乘256 0x00000001 0x00000002 转换为10进制 不就是 2+1*256
我试着放了一个“A5”进行运算,A5换算成十进制是165,但得到的l却大得离谱:16693,是我用错了,还是说需要在转换一下?[/quote] A5 是按照字符串传进去的。。 也就是说 第一个UCHAR 存入的是 A 的 ASCII码对应的值65,第二个对应的是5对应的ASCII码的值 53 内存位置是这样0x01000001 0x00110101 65 * 256 + 53 = 16693 A5是 16进制表示的话,0xA5应该是 一个UCHAR对应的是 psBinString[0] = 165 或者 psBinString[0] = 0xA5;
东北 2014-09-18
  • 打赏
  • 举报
回复
1.psBinString在这里是缓冲区的概念 2.(long)psBinString[i],这里做了强制转换,步长是8Byte(看上去你这是64位系统,否则不会乘以256)
shuitamen 2014-09-18
  • 打赏
  • 举报
回复
引用 1 楼 MisteryMethod 的回复:
psBinString[n] 是一个UCHAR 0x00000000 占用8bit 所以每次偏移一个UCHAR 就需要乘256 0x00000001 0x00000002 转换为10进制 不就是 2+1*256
我试着放了一个“A5”进行运算,A5换算成十进制是165,但得到的l却大得离谱:16693,是我用错了,还是说需要在转换一下?
MMinus 2014-09-18
  • 打赏
  • 举报
回复
psBinString[n] 是一个UCHAR 0x00000000 占用8bit 所以每次偏移一个UCHAR 就需要乘256 0x00000001 0x00000002 转换为10进制 不就是 2+1*256
赵4老师 2014-09-18
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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