该文件大约是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,然后大小正确,但是这是一个正确的方法,并且它会在未来导致更大的值出现问题吗?答案 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);