2016-11-09 17 views
0

广东话斯普利特和商店的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

注:'CA6B'是作为一个整体在十六进制有效。 –

+0

是的,它是一个十进制的整个CA6B,但我希望它像我的意图分开 – user6318361

+0

究竟是什么要求?你的第一段似乎想要将一个由6个字符组成的字符串分成3个字符串,每个字符都有两个字符,但是你的代码看起来像你必须转换一个十进制数,然后是一个十六进制数,然后是另一个十进制数。长度是否固定?没有分隔符吗? –

回答

1

的 “问题”,你看,因为这条线

resulta = strtol (theEnd, &theEnd, 16); 

存在的,theEndCA6B这,根据基数16,是一个整体有效的输入,所以整个字符串被消耗和转换。十进制表示形式值为51819,您将其看作输出。

实现这将是(基于你的方法)取的指针数组的起始的最佳方式,以及“剪辑”,它在备用索引。

也就是说,所有printf()语句在逻辑上是错误的,因为只有一个格式说明符,但是您提供了两个参数,因此最后一个参数将被默认忽略。

+0

我该怎么做才能使它分开十六进制值? – user6318361

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; 
+0

我需要将值存储在变量中,所以我可以用它做点什么 – user6318361

+1

@ user6318361最好使用数组而不是使用单独的变量。 (但是,循环可以扩展。) – BLUEPIXY

+0

感谢上帝..它的完美..非常感谢你,你为我节省了很多时间,谢谢蓝色 – user6318361