c# - 字节数组不正确转换为MB

时间:2014-01-08 14:13:37

标签: c#-4.0 data-conversion

该文件大约是24mb,并且它保存在DataBase中,所以我将它转换为位数组然后,经过多次建议后,我使用了bitconverter.tosingle(,),这给了我不好的结果,这是我的代码:

     byte[] imgData = prod.ImageData;

     float myFloat = BitConverter.ToSingle(imgData, 0);

     float mb = (myFloat / 1024f) / 1024f;

当我调试时,我得到了这些结果:

字节[24786273]

myFloat = 12564.0361

mb = 0.0119819986

奇怪的是,数组的大小与文件的大小完全相同。如何正确地将其转换为浮动然后显示为mb?

编辑:我尝试将myFloat设置为imgData.Length,然后大小正确,但是这是一个正确的方法,并且它会在未来导致更大的值出现问题吗?

1 个答案:

答案 0 :(得分:9)

您将从图像中取出前四个字节并将其转换为IEEE浮点。我不是图像文件的专家所以我不确定前四个字节是否总是长度,即使这种情况仍然不正确(参见specification)。但是,通过数组的长度已经知道文件的长度,因此获得大小的更简单方法是:

byte[] imgData = prod.ImageData;

float mb = (imgData.Length / 1024f) / 1024f;

要解决您的问题:这仍适用于大型文件,请考虑24TB示例。

var bytes = 24L * 1024 * 1024 * 1024 * 1024;

var inMb = (bytes / 1024.0F / 1024.0F);