gpt4 book ai didi

c - 如何从 C 数组中提取数字/字节?

转载 作者:行者123 更新时间:2023-11-30 19:24:22 25 4
gpt4 key购买 nike

这里我编写了一段代码,可以从序列中生成接下来的 8 个数字。

int next_exp_data(unsigned long long int expected_data)
{
int i=0;
unsigned long long int seq_gen_value=1976943448883713;
unsigned long long int temp_data[10];
temp_data[0]=seq_gen_value;
for(i=0;i<10;i++)
{
printf("%llu",temp_data[i]);
putchar('\n');
expected_data=temp_data[i];
temp_data[i+1]=temp_data[i] +2260630401189896;
}
return (expected_data);
}

我想知道如何提取数组的每个字节/数字并返回每个数字/字节?请帮助我。

编辑:这是我的代码。基本上我想读取一个文件并比较内容以检查读取的数据是否与生成的顺序数据匹配。这里缓冲区包含与 temp_data 生成的数据相同的数据(即 10 个数字,如 0x07060504030201 next 0f0e0d0c0b0a0908等)。我想比较缓冲区的数据和函数的数据。任何人都可以建议我该怎么做。我被卡住了。任何更改都值得赞赏。

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

int main(void){
FILE *fp;
char *buffer,c;
size_t filesize,buffer_size;
int i;
unsigned long long int expected_data=1976943448883713;
fp=fopen("seqdata.c","r");
if(fp==NULL){
fputs("Error\n",stderr);
exit(1);
}
fseek(fp,0L,SEEK_END);
filesize=ftell(fp);
printf("Size of seqdata file is:%u \n",filesize);
fseek(fp,0L,SEEK_SET);
buffer=(char*)malloc(sizeof(char)*filesize);
if(buffer == NULL){
fputs("\nMemory error ",stderr);
}
buffer_size=fread(buffer,sizeof(char),filesize,fp);
for(i=0;i<buffer_size;i++){
printf("%c",*(buffer +i));
}
printf("No of elements read from file are:%u \n",buffer_size);

fseek(fp,0L,SEEK_SET);
int current_pos = 0;
while(current_pos < buffer_size){
if(*(buffer +current_pos) != expected_data)
{
fputs("Error\n",stderr);
exit(1);
}
else{
printf("data matching \n");
current_pos++;
expected_data=next_exp_data(expected_data);
}
}

fclose(fp);
free(buffer);
return 0;
}

int next_exp_data(unsigned long long int expected_data)
{
int i=0;
unsigned long long int seq_gen_value=1976943448883713;
unsigned long long int temp_data[10];
temp_data[0]=seq_gen_value;
for(i=0;i<10;i++)
{
printf("%llu",temp_data[i]);
putchar('\n');
expected_data=temp_data[i];
temp_data[i+1]=temp_data[i] +2260630401189896;
}
return (expected_data);
}

最佳答案

它取决于机器,但这通常采用以下两种方式之一:

union {
unsigned char b [8];
long long i;
} v;
v .i = seq_gen_value;
for (int j = 0; j < 8; ++j)
printf ("%d, ", v .b [j]);

在小端机器(x86、vax 等)上,字节首先以最低有效位输出。在大端机器上,它们首先输出最重要的。

<小时/>

顺便说一下,对“魔数(Magic Number)”进行编码会更有用,这样可以更容易地理解它们的含义。例如,不要将 1976943448883713 写入 0x7060504030201

关于c - 如何从 C 数组中提取数字/字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3437697/

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