繁体   English   中英

在C中生成1000字节的十六进制数

[英]To generate hexadecimal numbers for 1000 bytes in C

我想从种子值(初始值)0706050403020100开始在C中生成十六进制数字,我的下一个数字应该是0f0e0d0c0b0a0908,以此类推以进行下一次迭代。
这样,我想生成例如1​​000个字节的数字。

1)我如何生成这些十六进制数。

2)如果我想逐字符比较生成/生成的十六进制数字与具有读取文件内容的缓冲区(动态)中可用的数据进行比较,如何存储这些数字。

  Any suggestions/answers are most welcome as i am still learning C language.

编辑:这是我尝试过的代码。

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

int main(){
  FILE *fp;
  char *buffer, c;
  size_t filesize, result;
  int i, expected_data[];

  fp = fopen("hex_data", "r");
  if (fp == NULL) {  
    fputs("Error\n", stderr);
    exit(1);
  }
  fseek(fp, 0L, SEEK_END);
  filesize = ftell(fp);
  printf("Size of hex_data 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), size, fp);
  for(i=0; i < result; 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);
    }
    else {
      current_pos++;
      expected_data = next_exp_data(data); //function is call hexadecimal numbers produced
    }
  }

在这里我想写一个函数来生成从0706050403020100开始的1000字节的十六进制数。如果这是每次我向每个字节加08时的初始数据,我应该得到下一个数字(直到1000字节)。但是我不知道怎么做。有人可以帮我吗。

欢迎对代码进行任何更正。

这将生成1000个字节的随机十六进制数。 (或者,用ASCII表示的1000个十六进制数字。)

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

int main(int argc, char **argv) {
    int i;
    for (i=0; i<1000; i++) {
        printf("%x", rand()%16);
    }
    printf("\n");
    return EXIT_SUCCESS;
}

如果要将它们存储在缓冲区中以便以后与其他对象进行比较,则可能需要查看sprintf而不是printf 为此,您确实需要先了解如何在C中分配和使用字符串。

编辑 :这可能是您所追求的。 它从标准输入(可以根据需要从文件重定向)中读取十六进制数字,并检查其是否遵循您描述的模式。

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

int main(int argc, char **argv) {
    int expected_number = 7;
    unsigned int read_number;
    while (1 == scanf("%2x", &read_number)) {
        if (expected_number != read_number) {
            fprintf(stderr, "Expected %02x but got %02x.\n", expected_number, read_number);
        }
        expected_number--;
        if (expected_number == -1) expected_number = 15;
    }
    return EXIT_SUCCESS;
}

您的数字很大,因此请使用64位无符号整数数据类型,例如unsigned long long 如果不采用新的方案,您将无法处理大于2**64数字。 使用printf("%x", value)打印十六进制值。

您可以查看GNU GMP库中的任意大整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM