gpt4 book ai didi

c - 字符数组的整数转换

转载 作者:行者123 更新时间:2023-12-02 07:30:48 24 4
gpt4 key购买 nike

我最近一直在努力复习我的 C,并且正在编写一个程序来手动解析 PNG 文件。

我在十六进制编辑器中查看了 PNG 文件,注意到字节流看起来像

00 00 00 0D

十六进制格式。

这个字符串应该代表我感兴趣的长度。

我使用 getc(file) 提取 PNG 文件的字节。

我创建了一个字符数组作为

char example[8];

用于存储从 getc 中检索到的字符。

现在,我填充了 example 并用

打印了它
printf("%#x, %#x, %#x, %#x", example[0]....

显示 0, 0, 0, 0xd 这正是我想要的。

但是当我使用

int x = atoi(example) 

int x = strtol(example, NULL, 16)

在这两种情况下我都返回零(我原以为是 13)。我错过了一些基本的东西吗?

最佳答案

atoi 将类似 "0" 的字符串转换为其等效的数字,在本例中为 0。您拥有的是字符串 "\0\0\0\0\0\0\0\r",它与数字字符相去甚远。

如果你想将你的字节解释为一个数字,你可以做类似的事情

char example[4] = {0, 0, 0, 0xd};
printf("%d\n", *(uint32_t*) example);

您会注意到(如果您使用的是 x86 CPU)您将得到 218103808 而不是 13由于小字节序:你越往右走,数字越重要。

作为PNG uses big endian你可以简单地使用 be32toh (大端到主机端):

uint32_t* n = example;
printf("%u\n", be32toh(*n)

关于c - 字符数组的整数转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21946133/

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