java - 将字符串转换为 uint8_t 数组

标签 java c arduino

对于我的项目,我需要从 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);

结果:
enter image description here

将任何字符串分解为其基本元素(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 个左右的值...)
enter image description here

关于java - 将字符串转换为 uint8_t 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21710744/

相关文章:

java - JPA 获取子类的集合

c - 如果在 AVR 编程中所有变量都定义为 volatile 是不是很糟糕?

java - 如何在java中的eclipse和linux中获取类文件的路径?

java - 未找到测试运行程序 'JUnit 4' 的测试

C Fork程序输出解释

mysql - Arduino + Sim900 + MySql 连接问题

arduino - 通过自己的 Android 应用程序和 USB 电缆上传 Arduino Sketch

ios - 由 iOS 设备应用程序控制的伺服电机

java - 使用 core-nlp 的 DocumentPreprocessor 拆分句子时处理连词

c - Windows逆向工程: find a specific Windows structure