C#二进制数组到十进制?

时间:2010-01-19 07:04:11

标签: c# sql

在SQL中,以下内容有效cast([comlum] as Decimal(18,4))

如何在C#中进行相同的转换(来自二进制数据)?


SQL C#中的varbinary的数据类型加载到byte []所以,我想将byte []转换为decimal或double?

Sql查询:select cast([column_A] as decimal(18,4), [column_A] from table

结果:1​​91128.0000 0x1204000180D1EB71

我希望在C#

中获得191128.0000的价值

因为,我使用实体框架
所以,有这个问题

2 个答案:

答案 0 :(得分:4)

要将字节数组转换为C#decimal,反之亦然,您可以使用以下代码:

decimal d = 12.3456789m;

// decimal to byte[]
byte[] bytes = new byte[16];
Buffer.BlockCopy(decimal.GetBits(d), 0, bytes, 0, 16);

// byte[] to decimal
int[] bits = new int[4];
Buffer.BlockCopy(bytes, 0, bits, 0, 16);
Console.WriteLine(new decimal(bits));  // 12.3456789

答案 1 :(得分:3)

嗯,二进制数组包含什么?是现有decimal表示为byte[]吗?与float / double之类的内容不同,decimalbyte[]没有共同/共同的理解。

但是如果 一个.NET decimal你可以使用new decimal(int[])的重载 - 但是你需要先将字节打包成int;这意味着你需要知道字节序......

或者数组实际上是double?在这种情况下,BitConverter应该有所帮助。


看过问题的更新后,我怀疑你是来在来自SQL Server之前将这些数据(在TSQL中)转换为,或者挖掘用于打包SQL Server数据的特定于实现的编码(这将是脆弱的,IMO可能不应该离开服务器)。有一个SqlDecimal类型,但此不接受byte[]