【问题标题】:Converting char holding hex(1byte) to 2 char string将保存 hex(1byte) 的 char 转换为 2 char 字符串
【发布时间】:2018-08-26 08:00:14
【问题描述】:

我正在处理一些图像识别程序。我将所有数据读取到 char 缓冲区。该图像包含十六进制数据,因此我逐字节读取缓冲区,稍后我将处理它们。

我的问题是:如何从包含读取的十六进制数据的 char(1 字节) 转换和获取数据并使其成为 2 大小的 char 数组?

示例:8c -> 读入字符包含-116。我似乎找不到任何方法让它变成 char array[0] ='8'array[1]='c'

 if(buffer[4] < 10 && buffer[4] >= 0) {
            buyut1[0] = '0';
            buyut1[1] = buffer[4];
            sprintf(offSet, "%s", buyut1);
        }
        else{
            sprintf(offSet, "%x", buffer[4]);
        }
        if(buffer[5] < 10 && buffer[5] >= 0) {
            buyut2[0] = '0';
            buyut2[1] = buffer[5];
            sprintf(offSet,"%s""%c""%x",offSet,'0',buffer[5]);

        }
        else{
            sprintf(offSet,"%s%x",offSet,buffer[5]);
        }

我可以转换像 6c 这样的东西,它包含一个正数的签名形式,我认为。或以 0 开头的 03 之类的东西。

但是,例如,8c 的值为 -116,并且不适用于我的函数。

【问题讨论】:

  • 在 C 中编写字符串时,"%s""%s" 仅表示字符串 "%s" 后跟字符串 "%s",编译器会将其连接到 %s%"。使用"\"%s\"" 将引号放在字符串中。
  • 如果buffer已经包含了数据的十六进制表示,即buffer[4]'8',那么这个字节的值在'0''9'之间,而不是09。这意味着您只需要直接打印buffer。语句 "char(1 byte) contains read hex data" 没有意义 - 它要么包含字节,要么已经包含 ascii 形式的数据的十六进制表示。没有“十六进制数据”之类的东西。
  • 我不需要打印缓冲区什么的。我需要 8c 作为 8 和 c seperetely 所以我可以操作数据
  • @Groo 缓冲区包含 8c 作为字符,这表明 -116 我需要一些东西才能使其在数组(0)中为 8,在数组(1)中为 c

标签: c hex ascii posix converter


【解决方案1】:

sprintf() 函数指定要输出两个字符的十六进制值,并将输入buffer[4] 转换为无符号字符:

sprintf( offSet, "%02x", (unsigned char)buffer[4]);

【讨论】:

  • 感谢上帝,我爱你,这正是我一直在寻找的东西
猜你喜欢
  • 2018-03-27
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 2014-05-16
  • 2012-01-16
  • 2018-09-18
  • 2020-09-30
相关资源
最近更新 更多