【发布时间】: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'之间,而不是0和9。这意味着您只需要直接打印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