python读取C#写的二进制文件,byte类型unpack

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python读取C#写的二进制文件,byte类型unpack相关的知识,希望对你有一定的参考价值。

参考技术A         近期有一部分早期记录数据,C#写的二进制数据,在读取的过程中,short和unshort类型还是比较好转换的,但是碰到byte类型,对照struct的说明是x,设置读取格式时,这部分会空出来,读不出来。查看说明C#的byte类型在python是no value,用x读不出来。因为大概知道数据是整数类型的,于是用b(与B区别,是否有负值),也是1个字节,和C#中的byte一样长度,可以正确显示出来数据。如果是字符类,可以考虑c,s,p。注意变量所占字节数。(读出来数据最好测试验证一下)。

def readWrite(fname):

    with open(fname,'rb') as f:

        if fname[-3:] == 'RPT' :    #文件格式是RPT格式的二进制文件

            data = f.read()

           #fmt = 'H16x2H4x2H10x5H2h6H'   #数据格式中x会导致数据忽略掉,读不出来

           fmt = 'H16b2H4b2H10b5H2h6H'   #采用b替换后,数据格式显示正常

            data1= struct.unpack(fmt,data)

        elif fname[-3:] == 'DAY':     #文件格式时DAY格式的二进制文件

            data = f.read()

            fmt = '4i'

            data1= struct.unpack(fmt,data)

        else:

            data1 = '不是指定文件或文件错误'

            print('不是指定文件')

    return data1

c#从数据库中读取图片出现参数无效

从SQL Server2000中读取图片 int i = 1; byte[] mybyte = ((byte[])dr["picture"]); //创建内存流。 MemoryStream myStream = new MemoryStream(); //图片二进制,写入内存 foreach (byte a in mybyte) myStream.WriteByte(a); //以内存数据流,创建图片对象。 Image myImage = Image.FromStream(myStream); myStream.Close(); //图片框赋值,显示出该图片对象。 i++; 在Image myImage = Image.FromStream(myStream); 出现参数无效错误。但之前相同个的语句在有datagridview的地方用过N次了。都没出现过问题,都可以读取出来,请问datagridview是不是有什么机制啊

说明:
DataGridView
控件替换了
DataGrid
控件并添加了功能;但是也可选择保留
DataGrid
控件以备
向后兼容
和将来使用。有关更多信息,请参见
Windows
窗体
DataGridView
控件和
DataGrid
控件之间的区别。
使用DataGridView
控件,可以显示和编辑来自多种不同类型的数据源的表格数据。

数据绑定

DataGridView
控件非常简单和直观,在大多数情况下,只需设置
DataSource
属性即可。在绑定到包含多个列表或表的数据源时,只需将
DataMember
属性设置为指定要绑定的列表或表的字符串即可。
DataGridView
控件支持标准
Windows
窗体数据绑定模型,因此该控件将绑定到下表所述的类的实例:
任何实现
IList
接口的类,包括一维数组。任何实现
IListSource
接口的类,例如
DataTable

DataSet
类。任何实现
IBindingList
接口的类,例如
BindingList(Of
T)
类。任何实现
IBindingListView
接口的类,例如
BindingSource
类。
DataGridView
控件支持对这些接口所返回对象的公共属性的数据绑定,如果在返回的对象上实现
ICustomTypeDescriptor
接口,则还支持对该接口所返回的属性集合的数据绑定。
通常绑定到
BindingSource
组件,并将
BindingSource
组件绑定到其他数据源或使用
业务对象
填充该组件。BindingSource
组件为首选数据源,因为该组件可以绑定到各种数据源,并可以自动解决许多数据绑定问题。有关更多信息,请参见
BindingSource
组件。
DataGridView
控件还可以在“取消绑定”模式下使用,无需任何基础数据存储区。有关使用未绑定的
DataGridView
控件的代码示例,请参见演练:创建未绑定的
Windows
窗体
DataGridView
控件。
DataGridView
控件具有极高的可配置性和可扩展性,它提供有大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。当需要在
Windows
窗体应用程序中显示表格数据时,请首先考虑使用
DataGridView
控件,然后再考虑使用其他控件(例如
DataGrid)。若要以小型网格显示只读值,或者若要使用户能够编辑具有数百万条记录的表,DataGridView
控件将为您提供可以方便地进行编程以及有效地利用内存的解决方案。
参考技术A yte[]
im
=
(byte[])commond.executescalar();
memorystream
stream
=
new
memorystream(im,
false);
picturebox1.image
=
image.fromstream(stream);
//报错,参数无效????
stream.close();
con.close();
sqlcommand
commond
=
new
sqlcommand("select
personimage
from
temp",
con);
这里需要修改一下,你要判断你要找的是哪个图片?
修改为
using(memorystream
ms=new
memorystrem(im))

picturebox1.image
=
image.fromstream(stream);

以上是关于python读取C#写的二进制文件,byte类型unpack的主要内容,如果未能解决你的问题,请参考以下文章

python3二进制文件读写直接加b不行吗

使用 C# 对巨大的二进制文件进行排序

C# 对象文件与二进制串(byte数组)之间的转换

python string类型 bytes类型 bytearray类型

C#里面怎么把二进制转换成byte[]

读取数据库中的image类型后的保存方式