gpt4 book ai didi

c - 读取文件字符串并存储在c中的uint8_t数组中

转载 作者:行者123 更新时间:2023-11-30 21:48:15 25 4
gpt4 key购买 nike

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));

它成功地将前 16 个字节复制到 tmpArray,但接下来的 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 };

最佳答案

这就是你想要的吗? (测试给出二进制 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 个字符转换为 1 个 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;
}

关于c - 读取文件字符串并存储在c中的uint8_t数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50465727/

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