读取bin文件,并且按结构体赋值打印

目标:读取一个bin文件,并且将bin文件中的数据,按字节对齐赋值给结构体,并且打印出结构体的内容

目前思路是简单的先将bin文件数据一次性读到一个数组中,再将数组强制转换为结构体

    char buff[256]
    FILE *fp;
    fp = NULL;
    fp = fopen(argv[1], "rb");
    if (NULL == fp)
    {
        printf( "The file was not opened\n");
        return;
    }
    fread(buff, 1, 256, fp);
    struct A a = (struct A) buff; 

另外,在博客看到一个输出结构体的demo,贴在这里

只需要传入要打印结构体的结构体指针和结构体大小,就可以进行打印,且可以控制一行打印的字节数和字节与字节之间是否需要留一个空格

void print_struct_content(void *strp, size_t size)
{
    size_t i;
    char *printbit = (char *)strp;
    int format = 0;
    for (i = 0; i < size; i++)
    {
        printf("%02x", printbit[i]&0XFF);
        format++;
        if (0 == (format % 4))
        {
            printf("\n");
        }
    }
}

参考:

https://blog.csdn.net/XIAXIA__/article/details/9360149

原文地址:https://www.cnblogs.com/zzdbullet/p/10059397.html

时间: 2024-10-02 10:09:27

读取bin文件,并且按结构体赋值打印的相关文章

C语言中结构体赋值问题的讨论(转载)

今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言中结构体赋值的问题吧: 结构体直接赋值的实现 下面是一个实例: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //define two structs with three different field

golang-利用反射给结构体赋值

由于想给一个结构体的部分成员赋值,但是有不知道具体名字,故将tag的json名字作为索引,按照json名字来一一赋值 //将结构体里的成员按照json名字来赋值 func SetStructFieldByJsonName(ptr interface{}, fields map[string]interface{}) { logger.Debug("fields:", fields) v := reflect.ValueOf(ptr).Elem() // the struct varia

c语言_文件操作_FILE结构体小解释

参考文档来自:https://www.cnblogs.com/haore147/p/3648395.html 我们通过fopen返回一个文件指针(指向FILE结构体的指针)来进行文件操作. 在vs2013下的代码如下: #include <stdio.h> #pragma warning(disable:4996) int main() { FILE *p = fopen("C:\\test\\win\\a.txt", "r"); char buf[10

文件包含与结构体

1.文件包含 (1)1个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令. (2)文件包含允许嵌套,即在一个被包含的文件种包含另一个文件. (3)包含命令中的文件名可以用双括号括起来,也可以用尖括号括起来.但这两种形式是有区别的:使用尖括号表示在包含文件目录中去查找:使用双引号表示首先在当前的源文件目录中去查找,若未找到则到包含目录中去查找. 条件编译 预处理程序提供了条件编译的功能.可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件,这对

结构体赋值

#include <stdio.h> struct student{ int ID; char name[48]; int age; }; int main(){ struct student s1 = { 1, "lifei", 24 }; struct student s2; s2 = s1; //s2.name = "letben";//错误 1 error C2106: “=”: 左操作数必须为左值 f:\tryc++\结构体的赋值\结构体的赋值

62_json文件解析成结构体格式

package main import ( "encoding/json" "fmt") type People struct { //由于结构体生成json文本成员变量必须大写,可以使用struct_tag来二次编码,此时可以使用小写 Name string `json:"name"` Subject []string Isok bool `json:", string"` //转换成字符串类型输出 Price float6

c语言中的结构体为值类型,当把一个结构体赋值给另一个结构体时,为值传递

#include <stdio.h> int main() { struct person { int age; }; struct person p1 = {19}; //值传递,将p1中所有成员变量的值赋值个p2中对应的成员变量 struct person p2=p1; //改变p1的成员变量的值,不会影响p2中对应成员变量的值 p1.age = 20; printf("p1.age=%d\n",p1.age); printf("p2.age=%d\n&quo

python读取bin文件并下发串口

# coding:utf-8import time, serialfrom struct import *import binascii file = open('E:\\1.bin', 'rb')i = 0while 1: c = file.read(1) # 将字节转换成16进制: ssss = str(binascii.b2a_hex(c))[2:-1] print(str(binascii.b2a_hex(c))[2:-1]) if not c: break ser = serial.S

gcc支持的一种结构体赋值方式

struct info{ int a; char b; struct fd{    int c;    int d;          }fg;}; 其实我们也可以这样赋值:同样对于其他的类型也是一样的,union enum.... 例如: struct info td = { .a = 100, .b = 100, .fg = {       .c = 100,       .d = 100,       } }; 或者是这样:struct info td = { .a = 100, .b =