将ASCII十六进制字符串转换为字节数组

眼镜蛇

我有一个字符数组说 char value []={'0','2','0','c','0','3'};

我想将其转换为字节数组,如 unsigned char val[]={'02','0c','03'}

这是在嵌入式应用程序中,因此我不能使用string.h函数。我怎样才能做到这一点?

托比

在您谈到嵌入式应用程序时,我假设您想将数字保存为值而不是字符串/字符。因此,如果您只想将字符数据存储为数字(例如以整数形式),则可以使用sscanf

这意味着您可以执行以下操作:

 char source_val[] = {'0','A','0','3','B','7'} // Represents the numbers 0x0A, 0x03 and 0xB7
 uint8 dest_val[3];                            // We want to save 3 numbers
 for(int i = 0; i<3; i++)
 {
     sscanf(&source_val[i*2],"%x%x",&dest_val[i]); // Everytime we read two chars --> %x%x
 }
 // Now dest_val contains 0x0A, 0x03 and 0xB7

但是,如果您想将其存储为字符串(如您的示例中所示),则不能使用,unsigned char因为该类型也只有8位长,这意味着它只能存储一个字符。在单个(无符号)字符中显示“ B3”不起作用。

编辑:根据评论可以,目标是将传递的数据保存为数值。不幸的是,打开器的编译器不支持sscanf这是最简单的方法。无论如何,由于(我认为)这是最简单的方法,因此我将保留答案的这一部分,并尝试在此编辑中添加更多自定义方法。

关于数据类型,实际上没有关系uint8即使我建议使用某种整数数据类型,也可以将数据存储到中unsigned char这里的问题是,您传递的数据是一个字符/字母,您想将其解释为数值。但是,角色的内部存储有所不同。您可以检查ASCII表,在其中可以检查每个字符的内部值。例如:

char letter = 'A'; // Internally 0x41 
char number = 0x61; // Internally 0x64 - represents the letter 'a'

如您所见,大写和小写之间也存在差异。

如果您执行以下操作:

int myVal = letter;  //

myVal不代表值0xA(十进制10),它将具有值0x41。

您无法使用的事实sscanf意味着您需要一个自定义函数。因此,首先我们需要一种将一个字母转换为整数的方法:

int charToInt(char letter)
{
    int myNumerical;
    // First we want to check if its 0-9, A-F, or a-f) --> See ASCII Table
    if(letter > 47 && letter < 58)
    {
        // 0-9
        myNumerical = letter-48;
        // The Letter "0" is in the ASCII table at position 48 -> meaning if we subtract 48 we get 0 and so on...
    }
    else if(letter > 64 && letter < 71)
    {
       // A-F
       myNumerical = letter-55 
       // The Letter "A" (dec 10) is at Pos 65 --> 65-55 = 10 and so on..
    }
    else if(letter > 96 && letter < 103)
    {
       // a-f
       myNumerical = letter-87
       // The Letter "a" (dec 10) is at Pos 97--> 97-87 = 10 and so on...
    }
    else
    {
       // Not supported letter...
       myNumerical = -1;
    }
    return myNumerical;
}

现在,我们有一种方法可以将每个字符转换为数字。另一个问题是总是将两个字符附加在一起,但这很容易:

int appendNumbers(int higherNibble, int lowerNibble)
{
     int myNumber = higherNibble << 4;
     myNumber |= lowerNibbler;
     return myNumber;
    // Example: higherNibble = 0x0A, lowerNibble = 0x03;  -> myNumber 0 0xA3
    // Of course you have to ensure that the parameters are not bigger than 0x0F 
}

现在,所有的一切将是这样的:

 char source_val[] = {'0','A','0','3','B','7'} // Represents the numbers 0x0A, 0x03 and 0xB7
 int dest_val[3];                             // We want to save 3 numbers
 int temp_low, temp_high;
 for(int i = 0; i<3; i++)
 {
     temp_high = charToInt(source_val[i*2]);
     temp_low = charToInt(source_val[i*2+1]);
     dest_val[i] = appendNumbers(temp_high , temp_low);
 }

希望我能正确理解您的问题,这对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将十六进制字符串转换为字节数组

来自分类Dev

将十六进制字符串转换为字节数组

来自分类Dev

将十六进制字符串转换为字节数组

来自分类Dev

将字符串转换为十六进制,然后转换为字节数组

来自分类Dev

Java通用将字节数组转换为字符串(非十六进制,十进制)

来自分类Dev

Java通用将字节数组转换为字符串(非十六进制,十进制)

来自分类Dev

十六进制字符串转换为字节数组

来自分类Dev

在 C# 中将十六进制字符串转换为字节数组

来自分类Dev

是否有将字节数组转换为十六进制字符串的本地方法?

来自分类Dev

将纯文本字符串转换为十六进制样式的字节数组?

来自分类Dev

将纯文本字符串转换为十六进制样式的字节数组?

来自分类Dev

使用 VB.NET 2015 将长十六进制字符串转换为十六进制字节数组

来自分类Dev

字节数组到javascript中的十六进制字符串转换

来自分类Dev

如何在C#中将十进制字符串值转换为十六进制字节数组?

来自分类Dev

Python将字节数组转换为十六进制数组

来自分类Dev

将十六进制字符串转换为字节[]

来自分类Dev

将十六进制字符串转换为字节[]

来自分类Dev

将包含非ASCII字符的字节数组转换为字符串

来自分类Dev

将十六进制(字节)转换为奇数长度字符串中的 ASCII 文本

来自分类Dev

将十六进制字符串转换为 ascii

来自分类Dev

将字节数组转换为十六进制std :: string时空格

来自分类Dev

将字节数组(十六进制)转换为有符号的Int

来自分类Dev

“离开”文本框后,将十六进制字符串格式化为字节数组

来自分类Dev

十六进制字符串到字节数组C#

来自分类Dev

十六进制字符串到字节数组C#

来自分类Dev

将字符串转换为字节数组

来自分类Dev

将二进制字符串转换为字节数组

来自分类Dev

将二进制字符串转换为字节数组

来自分类Dev

Java:将十六进制编码的字符串转换为十六进制字节

Related 相关文章

  1. 1

    将十六进制字符串转换为字节数组

  2. 2

    将十六进制字符串转换为字节数组

  3. 3

    将十六进制字符串转换为字节数组

  4. 4

    将字符串转换为十六进制,然后转换为字节数组

  5. 5

    Java通用将字节数组转换为字符串(非十六进制,十进制)

  6. 6

    Java通用将字节数组转换为字符串(非十六进制,十进制)

  7. 7

    十六进制字符串转换为字节数组

  8. 8

    在 C# 中将十六进制字符串转换为字节数组

  9. 9

    是否有将字节数组转换为十六进制字符串的本地方法?

  10. 10

    将纯文本字符串转换为十六进制样式的字节数组?

  11. 11

    将纯文本字符串转换为十六进制样式的字节数组?

  12. 12

    使用 VB.NET 2015 将长十六进制字符串转换为十六进制字节数组

  13. 13

    字节数组到javascript中的十六进制字符串转换

  14. 14

    如何在C#中将十进制字符串值转换为十六进制字节数组?

  15. 15

    Python将字节数组转换为十六进制数组

  16. 16

    将十六进制字符串转换为字节[]

  17. 17

    将十六进制字符串转换为字节[]

  18. 18

    将包含非ASCII字符的字节数组转换为字符串

  19. 19

    将十六进制(字节)转换为奇数长度字符串中的 ASCII 文本

  20. 20

    将十六进制字符串转换为 ascii

  21. 21

    将字节数组转换为十六进制std :: string时空格

  22. 22

    将字节数组(十六进制)转换为有符号的Int

  23. 23

    “离开”文本框后,将十六进制字符串格式化为字节数组

  24. 24

    十六进制字符串到字节数组C#

  25. 25

    十六进制字符串到字节数组C#

  26. 26

    将字符串转换为字节数组

  27. 27

    将二进制字符串转换为字节数组

  28. 28

    将二进制字符串转换为字节数组

  29. 29

    Java:将十六进制编码的字符串转换为十六进制字节

热门标签

归档