首页 新闻 会员 周边

数据转换(C#)

0
悬赏园豆:80 [已解决问题] 解决于 2011-07-04 15:51

我现在有这样一个问题

for (int i = 0; i < bytes.Length / 2; i++)
{
list.Add(i,bytes [i
*2]+bytes[i*2+1]*256);
}
bytes里面的数据是十进制的,我想先转换为十六进制再乘以256再相加,然后再转换为10禁制,不知道怎么做了,请大家帮忙!

马战鹏的主页 马战鹏 | 菜鸟二级 | 园豆:432
提问于:2011-07-01 21:11
< >
分享
最佳答案
0

不需要转换,因为不管是多少进制在硬件中存储都是2进制。你说的多少进制,仅仅是呈现的不同,默认在断点调试程序的时候是10进制显示,可以选择16进制显示方式。所以你将的在程序中进制转换,无意义。如果是呈现不同进制的样式,ToSting(‘格式符’)方法有个重载

收获园豆:50
慧☆星 | 大侠五级 |园豆:5640 | 2011-07-02 09:11
十进制的五和十六进制的五同时乘以256得到的结果不一样。。
马战鹏 | 园豆:432 (菜鸟二级) | 2011-07-02 23:49
@
马战鹏:
如果是十进制的五和十六进制的五是同一个类型,则得出的值是相同的。
你可能没分清数据类型(比如:int,byte,double等)与数据(显示)格式(比如:int类型.ToString("D4")//4位十进制,.ToString("X4")//4位十六进制等)的区别。
你应试注意在运算中他们只否隐式的转化成不同的类型,而不是他们不同的显示格式。
拾玄 | 园豆:439 (菜鸟二级) | 2011-07-03 08:52
@
马战鹏:是你的概念有问题。乘法运算是10进制的。所以2进制乘以10进制的256,必须先转换为10进制再相乘才有意义。同样16进制类推
慧☆星 | 园豆:5640 (大侠五级) | 2011-07-04 08:56
恩,我明白了,谢谢!
马战鹏 | 园豆:432 (菜鸟二级) | 2011-07-04 15:50
其他回答(2)
0

为什么要转换呢?

你所说的这种转换只是从不同的则面去看一个实体,而这个实体(也就是计算机中的数据)根本没有改变。

区分十进制与十六进制,只有在输入,输出中才有意义,因为这两者人可以接触的到,它只为满足人们的多种表达方式。

而计算的过程中的区分则没意义,计算机不吃这套。。。

 

还有,程序附上的代码运行会有异常。

式中“bytes[i*2+1]"在最后一次循环时会溢出。

收获园豆:15
拾玄 | 园豆:439 (菜鸟二级) | 2011-07-02 00:56
不会吧?程序的代码我跑了很多遍了。。没有异常啊!
支持(0) 反对(0) 马战鹏 | 园豆:432 (菜鸟二级) | 2011-07-02 23:48
@
马战鹏:
这个我也没有运行,不过现在重新分析后发现是我错了:(
当时是这样分析的:
当i=bytes.length/2时i*2+1=bytes.length或者bytes.length+1,即都大于bytes.length-1,所以bytes[i*2+1]会出现异常。
但,事实上i不能等于bytes.length/2,所以我错了
支持(0) 反对(0) 拾玄 | 园豆:439 (菜鸟二级) | 2011-07-03 08:25
0

Int32.Parse(number, System.Globalization.NumberStyles.HexNumber)

将number转换成16进制

同时你要使用16进制做运算 你的256也应该是16进制的。

调试中为int a赋值为0x00(16进制值) 但是鼠标移动过去查看的时候已经为你转换成了10进制表示。

通常运算中一般用10进制运算。运算时使用16进制没有什么实际意义。如果要输出16进制。只需将计算结果最后转换即可。

C#中很少用到进制转换。

收获园豆:15
姜小牙 | 园豆:248 (菜鸟二级) | 2011-07-04 13:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册