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

sc0*_*tbr 2 data-conversion c#-4.0

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

     byte[] imgData = prod.ImageData;

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

     float mb = (myFloat / 1024f) / 1024f;
Run Code Online (Sandbox Code Playgroud)

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

字节[24786273]

myFloat = 12564.0361

mb = 0.0119819986

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

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

Bas*_*Bas 10

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

byte[] imgData = prod.ImageData;

float mb = (imgData.Length / 1024f) / 1024f;
Run Code Online (Sandbox Code Playgroud)

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

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

var inMb = (bytes / 1024.0F / 1024.0F);
Run Code Online (Sandbox Code Playgroud)