gpt4 book ai didi

c - 十六进制值表示和字节顺序说明

转载 作者:行者123 更新时间:2023-11-30 21:39:38 25 4
gpt4 key购买 nike

我正在编写一个脚本,基本上将一些示例数据输出为二进制 blob。我是软件领域的一名新实习生,依稀记得字节序的概念。

我意识到大尾数法的最高有效位从顶部开始,一直到内存块。

如果我有 0x03000201 并且数据被解析为输出 0 1 2,这是如何发生的以及正在采取哪些措施来使其在位、字节等方面发挥作用。

我想知道,在下面发布的示例中,当打印出变量中存储的数据时,如何提取数字以形成 0 1 2。

例如:我正在使用此文件创建几行二进制 blob:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
FILE *file;
int buffer = 0x03000201;
int buffer2= 0x010203;
file = fopen("test.bin", "wb");

if (file != NULL)
{
fwrite(&buffer, sizeof(buffer), 1, file);
fwrite(&buffer2, sizeof(buffer2), 1, file);
fclose(file);
}

return 0;
}

然后我创建了一个 Python 脚本来解析这些数据:

有关解析的信息

import struct
with open('test.bin','rb') as f:
while True:
data = f.read(4)
if not data: break
var1, var2, var3 = struct.unpack('=BHB', data)
print(var1, var2, var3)

最佳答案

大字节序或小字节序定义如何解释长于一个字节的字节序列以及如何将它们存储在内存中。维基百科会帮助你。

I was really just looking to understand how 0x0300020 when read 2 bytes at a time and reprinted yields 0 1 2.

您不是一次读取 2 个字节,而是读取 4 个字节:data = f.read(4)

f.read(size) reads some quantity of data and returns it as a string.

使用 =BHB - 字节、2 字节、字节来解压数据。仅当您解压数据时,字节顺序才会发挥作用,代码中的所有其他 IO 调用都处理字节序列。

使用 unpack() Byte Order, Size, and Alignment 进行实验您还可以使用您选择的十六进制编辑器查看文件数据。

如果您在研究后有具体问题,请在此处提问。

关于c - 十六进制值表示和字节顺序说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com