Прочитать строку файла и сохранить в массиве uint8_t в c [закрыто]

eumac спросил: 28 апреля 2018 в 09:04 в: c
CHAR fileBuffer[1000];
uint8_t tmpArray[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t tmpArray2] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };for (i = 0; i < sizeof(fileBuffer); i++)
    {
    printf("%02X ", (uint8_t)tmpArray[i]);
    }

взять строку из файла и преобразовать в массив байтов, как в tmpArray. Строка в файле будет выглядеть так: 5FE1908F5FA463A9F94B8B1EA460B70A7D946B144E6A5093965A882E7855931A

Я попытался прочитать это в двух байтовых массивах, подобных этому

memmove(tmpArray, fileBuffer, 32 * sizeof(uint8_t));
memmove(tmpArray2,fileBuffer[32], 32 *sizeof(uint8_t));

он скопировал в ok в tmpArray сперва 16bytes, но следующие 16bytes были перепутаны в tmpArray2.Если вы могли бы помочь в любом случае, это было бы здорово

строка из файла, строка, как указано выше, и преобразовать в массивы uint8_t. два отдельных массива должны появиться после чтения / преобразования

uint8_t tmpArray[] = { 0x5F, 0xE1, 0x90, 0x8F, 0x5F, 0xA4, 0x63, 0xA9, 0xF9, 0x4B, 0x8B, 0x1E, 0xA4, 0x60, 0xB7, 0x0A };
uint8_t tmpArray2[] = { 0x7D, 0x94, 0x6B, 0x14, 0x4E, 0x6A, 0x50, 0x93, 0x96, 0x5A, 0x88, 0x2E, 0x78, 0x55, 0x93, 0x1A };


1 ответ

Есть решение
s.paszko ответил: 28 апреля 2018 в 05:14

Это то, что вы хотели? (чтобы проверить комбинацию двоичных 01 в качестве первого аргумента)

#include <stdio.h>
#include <stdint.h>uint8_t charToBin(char c)
{
    switch(c)
    {
        case '0': return 0;
        case '1': return 1;
    }
    return 0;
}uint8_t CstringToU8(const char * ptr)
{
    uint8_t value = 0;
    for(int i = 0; (ptr[i] != '\0') && (i<8); ++i)
    {
        value = (value<<1) | charToBin(ptr[i]);
    }
    return value;
}int main(int argc,const char *argv[])
{
    printf("%d\n",CstringToU8(argv[1]));
    return 0;
}

Вы можете использовать CstringToU8 () для преобразования 8 символов в один номер u8. Прочитайте целые данные в массиве char (например, char text), а затем преобразуйте 8 символов в число u8, сохраните их и переместите указатель на 8 байт дальше до тех пор, пока массив не закончится.

Потому что после изменения вопроса был изменен так вот мое новое решение. Код считывает шестнадцатеричные числа из файла и сохраняет его в массиве.

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>int main()
{
     FILE * fp;
    uint8_t number = 0;
    size_t fileSize = 0;
    uint8_t * array = NULL;
    size_t readedBytes = 0;
    size_t iterator = 0;    fp = fopen ("hexNumbers.txt", "r");    // check file size
    fseek(fp, 0L, SEEK_END);
    fileSize = ftell(fp);
    fseek(fp, 0L, SEEK_SET);    /// allocate max possible array size = fileSize/2
    array = malloc(fileSize/2 * sizeof(uint8_t));    /// read data into array
    while(!feof(fp))
    {
        if (fscanf(fp,"%2hhx",&number) == 1)
        {
            array[readedBytes++] = number;
        }
    }
    fclose(fp);    /// print array output
    for (iterator=0; iterator<readedBytes; ++iterator)
    {
        printf("%02x ", array[iterator]);
    }    free(array);
    return 0;
}
eumac ответил: 28 апреля 2018 в 12:35
Я попробовал это, и я получаю ошибки, неверные операнды в двоичные
eumac ответил: 28 апреля 2018 в 02:19
вопрос был отредактирован, чтобы найти помощь в преобразовании шестнадцатеричной строки в массив байтов