【问题标题】:read file string and store in uint8_t array in c [closed]读取文件字符串并存储在c中的uint8_t数组中[关闭]
【发布时间】:2018-05-22 10:44:12
【问题描述】:
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));

它正确复制到 tmpArray 的前 16 个字节,但接下来的 16 个字节在 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 };

【问题讨论】:

  • 您是否尝试过找到解决方案?您尝试的代码在哪里?我们不会为您完成您的工作......输入与您想要的输出如何匹配?他们不一样
  • 它不是你的代码,请先尝试并用代码发布你的问题。
  • 您的 .bin 文件是否包含如图所示的 '0''1' 字符序列,还是包含原始二进制数据?
  • '1's 和 '0's 的组合如何只给你零。提问时要努力一点。
  • 对不起,我试过了,

标签: c


【解决方案1】:

这就是你想要的吗? (测试将二进制 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;
}

【讨论】:

  • 我试过这个,但我收到错误,二进制操作数无效
  • 问题已编辑,寻求帮助将十六进制字符串转换为字节数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2021-07-13
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多