对于我的项目,我需要从 SD 卡读取一些单行文本,然后获取字符串中每个字符的十六进制或十进制值,并将这些值分组到一个数组中。
文本中没有空格且行以\n结尾
我使用此代码将所有内容读取到单个字符串中!
String line = "";
while (dataFile.available() != 0)
{
line = dataFile.readStringUntil('\n');
if (line == "")
break;
}
为了以后使用,我需要计算每个字符的十六进制值,此代码应该迭代字符串并将其分组到一个数组中。
int lineSize = line.length();
uint8_t data[lineSize];
for (int i = 0; i < lineSize; i++)
{
data[i] = line.charAt(i);
}
我真的不知道这是否有效,但我怀疑我是否会得到实际的十六进制值......
这些值在某处,但我真的不知道如何访问它们!
结果应如下所示:
uint8_t data[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}
最佳答案
将十六进制视为另一种显示存储在内存中的数据类型(uint8_t、char 或 int...)的格式。在内存中,它都是二进制的,或者是十六进制的。只是取决于您想如何看待它。
例如:以下语句:
long int A = 34;
uint8_t B = 34;
char C = 34;
int D = 34;
printf("0x%02x\n", 'A'); // surrounded with '' gives ASCII value of 65, then displayed in Hex
printf("0x%02x\n", A);
printf("0x%02x\n", B);
printf("0x%02x\n", C);
printf("0x%02x\n", D);
结果:
将任何字符串分解为其基本元素(char 或 uint8_t)并按如上所示打印它们将为您产生类似的结果。
编辑:
对于此输入文件(在可执行目录中将其称为 in.txt):
lkjahldfkjghlskjhlskjhlakdjgglsjkahlkj4hl5k6jh67=83kjhlkjshdf8f7s698s7dfgbslfkjbg
使用此代码:
int main(void)
{
FILE *fp;
char filename[]=".\\in.txt";
uint8_t c;
int length=0, i=0;
uint8_t *array;
//Get number of entries in file:
fp=fopen(filename, "r");
c= fgetc(fp);
while(c<255)
{
length++;
c= fgetc(fp);
}
fclose(fp);
//give array sufficient space
array = malloc(sizeof(uint8_t)*length);
fp=fopen(filename, "r");
//read file into array, and display as hexadecimal
c = fgetc(fp);
while(c<255)
{
array[i++]= c;
printf("0x%02x\n", c);
c = fgetc(fp);
}
fclose(fp);
getchar();//stop execution to view files (hit any key to exit)
return 0
}
您应该看到以下输出:(仅显示前 20 个左右的值...)
关于java - 将字符串转换为 uint8_t 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21710744/