如何使用C将char数组更改为int?

如何使用C将char数组更改为int?,c,C,我现在正在学习C,我正在解析一个原始注册表文件并读取它 我现在有些问题 000011E0 00 00 00 00 60 01 00 00 B9 01 00 00 00 00 00 00 000011F0 20 C0 26 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00001200 10 FC 00 00 FF FF FF FF 4C 00 01 00 00 00 00 00 this is hex value of REGISTRY fi

我现在正在学习C,我正在解析一个原始注册表文件并读取它

我现在有些问题

000011E0    00 00 00 00 60 01 00 00 B9 01 00 00 00 00 00 00 
000011F0    20 C0 26 00 FF FF FF FF 00 00 00 00 FF FF FF FF 
00001200    10 FC 00 00 FF FF FF FF 4C 00 01 00 00 00 00 00
this is hex value of REGISTRY file.

fseek(fp,0x11F0,SEEK_SET);

char tmp[4];
int now = ftell(fp);
for(int i = 0 ; i < 4 ; i++){
    tmp[i] = fgetc(fp);
    }
000011E000 00 60 01 00 B9 01 00 00 00
000011F0 20 C0 26 00 FF FF 00 00 FF FF FF
000011200 10 FC 00 FF FF FF 4C 00 01 00 00
这是注册表文件的十六进制值。
fseek(fp,0x11F0,SEEK_SET);
char-tmp[4];
int now=ftell(fp);
对于(int i=0;i<4;i++){
tmp[i]=fgetc(fp);
}
我制作了这个tmp阵列,但我需要0x0026c020。 如何将此数组更改为该值?或者请建议我更好的算法


谢谢。

如果您知道该值的存储方式与主机操作系统体系结构相同,您可以执行以下操作:

int value = *(int *)tmp;
但是,您不应该像在这里一样,以向后的顺序读取字节——这会改变尾数,并将导致不正确的值。试试这个:

int value;
if (fread(&value, sizeof(value), 1, fp) != 1) {
    /* Could not read, handle error. */
}

/* value is set, inspect it */

要将字符串转换为整数,已有可用函数,其中一个函数是 strtoul()


您可以使用标准strtoul()函数将字符串转换为整数值。

非常感谢!如果endian不同呢?那么首先需要确定两件事:数据的endianness是什么,主机的endianness是什么?如果一个大一个小,进行字节交换。标准的4字节交换习惯用法是:
value=((value&0xffu)8)|((value&0xff000000u)>>24)
或者,在创建数组时,使用网络函数htonl(),而不是创建自己的函数;在读取数组时,使用ntohl()/这可以保证无论endian是否匹配都能工作;如果使用的是网络订单/big-endian系统(不是x86),则不会执行任何操作。好吧,我想你不会写这些值,但是你仍然可以在需要的时候使用ntohl()或friendsreading@SethRobertson但在这种情况下,存储看起来是小端的,而不是网络顺序。htonl/ntohl将在小端交换,而不会在大端交换——这与OP可能需要的正好相反。而且,注册表中的存储很可能依赖于主机CPU,因此在任何情况下都不需要交换。