Для генерации шестнадцатеричных чисел для 1000 байтов в C - PullRequest
0 голосов
/ 07 августа 2010

Я хочу создать шестнадцатеричные числа в C, начиная с начального значения (начальное значение) 0706050403020100.Мой следующий номер должен быть 0f0e0d0c0b0a0908 и т. Д. Для следующей итерации.
Таким образом, я хочу сгенерировать числа, скажем, 1000 байтов.

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
    }
  }

Здесь я хочу написать функцию для генерации шестнадцатеричных чисел для1000 байтов, начиная с 0706050403020100. Если это исходные данные каждый раз, если я добавляю 08 к каждому байту, я должен получить следующее число (до 1000 байтов). Но я не знаю, как это сделать. Может кто-нибудь помочь мне.

Любые исправления в коде приветствуются.

Ответы [ 2 ]

1 голос
/ 07 августа 2010

Это сгенерирует 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;
}
0 голосов
/ 07 августа 2010

Ваши числа большие, поэтому используйте 64-битный тип данных без знака, например unsigned long long. Вы не сможете работать с числами, превышающими 2**64, без принятия новой схемы. Вывести шестнадцатеричные значения, используя printf("%x", value).

Вы можете посмотреть в библиотеке GNU GMP для сколь угодно больших целых чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...