求教一个double到一个byte[]的算法

wxwx110 2006-07-30 02:44:00
非负有一个double最大值不超过2^24最多保留2位小数
求一个算法把这个double值得2进制表示放到一个三字节数组中,不够的补0

例如3 得2进制11
存放到字节数组中的时候应该是 00000000,00000000,00000011
应当如何实现?(使用c#)


...全文
167 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨狼 2007-02-06
  • 打赏
  • 举报
回复
最大值不超过2^24

用整数就可以、
Convert.ToString(Math.Pow(2,24),2);
Knight94 2006-07-30
  • 打赏
  • 举报
回复
不过你的设计有二义性,例如:0.3与3,按照你的转换来说是相同的,所以还是固定位数,整形部分前两个byte,小数后面一个byte,这样的话应该如下:
private byte[] DoubleToBytes( double dValue )
{
int nValue = (int)( dValue * 100 );
byte[] bData = new byte[3];
bData[2] = (byte)(nValue % 100);
int nIntegerPart = ( nValue - bData[2]) / 100;

bData[1] = (byte) ( nIntegerPart & 0xFF );
bData[0] = (byte) ( nIntegerPart >> 8 );
return bData;

}
Knight94 2006-07-30
  • 打赏
  • 举报
回复
至于显示,把一个byte转换成8位2进制的字符串,可以如下:
string strValue = Convert.ToString( yourByte, 2 ).PadLeft( 8,'0' );
Knight94 2006-07-30
  • 打赏
  • 举报
回复
自己转吧

例如:
private byte[] DoubleToBytes( double dValue )
{
int nValue = (int)( dValue * 100 );
byte[] bData = new byte[3];
bData[2] = (byte)(nValue % 100);
int nIntegerPart = ( nValue - bData[2]) / 100;

if( bData[2] == 0 )
{
bData[2] = (byte) ( nIntegerPart & 0xFF );
bData[1] = (byte) ( nIntegerPart >> 8 );
}
else
{
bData[1] = (byte) ( nIntegerPart & 0xFF );
bData[0] = (byte) ( nIntegerPart >> 8 );
}

}
wxwx110 2006-07-30
  • 打赏
  • 举报
回复
补充一下,如果包含小数,前两个字节放整数部分,后一个字节放小数部分,

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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