我想拆分这个hexstring,转换em,并将em存储在一个数组中。 但似乎我的工作中有一些东西,我不知道是什么。
我打算拆分这个字符串
27CA6B
到
27
CA
6B
但输出始终只是第一个字符串。 像
27
51819
0
请有人帮忙,这是我的代码
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(void)
{
char bc[] = "27CA6B";
char *theEnd;
long result;
long resulta;
long resultb;
long resultc;
result = strtol (bc, &theEnd, 0);
resulta = strtol (theEnd, &theEnd, 16 );
resultb = strtol (theEnd, NULL, 0);
//int i = 0;
//printf("%c%c%c%c%c%c\n", bc[0], bc[1], bc[2], bc[3], bc[4], bc[5]);
printf("%ld\n", result, &bc[0]);
printf("%ld\n", resulta, &bc[1]);
printf("%ld\n", resultb, &bc[2]);
return 0;
}
答案 0 :(得分:1)
&#34;问题&#34;你因为这条线而看到了
resulta = strtol (theEnd, &theEnd, 16 );
那里,theEnd
指向CA6B
,根据基数16,它是一个有效的输入,因此整个字符串被消耗和转换。十进制表示值为51819,您将其视为输出。
实现这一目标的最佳方法是(根据您的方法)获取指向数组起始点的指针,并且&#34; clip&#34;它在备用索引上。
那就是说,所有printf()
语句在逻辑上都是错误的,因为你只有一个格式说明符,但你提供了两个参数,所以最后一个语句将被静默忽略。
答案 1 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char bc[] = "27CA6B";
unsigned char result[(sizeof(bc)-1)/2] = {0};
int i = 0;
for(char *p = bc; *p; p += 2){
char part[3] = {0};
memcpy(part, p, 2);//Extract 2 characters
result[i++] = strtoul(part, NULL, 16);
}
for(i = 0; i < sizeof(result); ++i){
printf("%3u %c%c\n", result[i], bc[i*2], bc[i*2+1]);
}
return 0;
}
展开循环
unsigned char result1,result2,result3;
int i = 0;
char part[3] = {0};
memcpy(part, bc + i, 2); i += 2;
result1 = strtoul(part, NULL, 16);
memcpy(part, bc + i, 2); i += 2;
result2 = strtoul(part, NULL, 16);
memcpy(part, bc + i, 2); i += 2;
result3 = strtoul(part, NULL, 16);
i = 0;
printf("%3u %c%c\n", result1, bc[i], bc[i+1]); i += 2;
printf("%3u %c%c\n", result2, bc[i], bc[i+1]); i += 2;
printf("%3u %c%c\n", result3, bc[i], bc[i+1]); i += 2;