我有一个由C结构构成的二进制文件,我想在Python中进行解析.我知道二进制文件的确切格式和布局,但我对如何使用Python Struct解包来读取这些数据感到困惑.
我是否必须遍历整个二进制文件,根据结构的成员一次解包一定数量的字节?
C文件格式:
typedef struct {
int data1;
int data2;
int data4;
} datanums;
typedef struct {
datanums numbers;
char *name;
} personal_data;
Run Code Online (Sandbox Code Playgroud)
让我们说二进制文件具有一个接一个地重复的personal_data结构.
我有一个带有新构造函数的模块:
package myClass;
sub new
{
my $class = shift;
my $arrayreference = shift;
bless $arrayreference, $class;
return $arrayreference;
};
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
foreach $ref (@arrayref)
{
$array1 = myClass->new($ref);
}
Run Code Online (Sandbox Code Playgroud)
$array1
每当被改写,但我想要的阵列中的每个元件具有不同的对象名称(如$array1
,$array2
,$array3
等等)
我发送了一系列参考文献,这是我的子程序:
sub multiply
{
my @product;
my $ref1 = $_[0];
my $ref2 = $_[1];
my @array1 = @$ref1;
my @array2 = @$ref2;
}
my ($rowsA,$columnsA) = &dimensions(@$ref1);
my ($rowsB,$columnsB) = &dimensions(@$ref2);
for $i (0..$rowsA-1){
for $j (0..$columnsB-1){
for $k (0..$columnsA-1){
$product[$i][$j] += $array1[$i][$k] * $array2[$k][$j];
}
}
}
Run Code Online (Sandbox Code Playgroud)
此子例程适用于两个参数,但如何在发送两个以上参数时将矩阵相乘?
例如,我有以下指针:
char *ptr;
char *string;
string = malloc(sizeof(char) * 10);
//set string to some word
Run Code Online (Sandbox Code Playgroud)
以下几行有什么区别?
ptr = string;
vs.
memcpy(ptr, string, sizeof(string));
Run Code Online (Sandbox Code Playgroud)
此外,如果我尝试在这些任务中的任何一个之后释放"字符串",是否会出现问题?"ptr"仍会保留我指定给它的值吗?
我知道声明一个全局变量,因为STATIC会使它对当前文件可见.每次在文件中调用函数时,变量是否保留其数据?
例如,
假设一些文件调用下面的func1(),它修改静态全局变量数据,然后调用func2()再次修改它.
下次文件调用func1()时,它是否会修改新的数据变量struct?或者它会保留先前调用中修改的先前数据吗?
STATIC MY_DATA Data1;
void func1( ){
//modify Data1
func2(Data1);
}
void func2 (MY_DATA data){
// modify data
}
Run Code Online (Sandbox Code Playgroud)