将两个数组元素合并为一个

时间:2018-09-26 09:14:47

标签: c arrays

在设法正确执行“ $”和“ *”之间的字符的异或后,我需要执行“ IF语句”以检查异或是否确实等于“ 64”。我需要合并这两个字符,并以某种方式与xor进行比较。问题是我变量类型。 XOR(求和)为十六进制,b(6和4的合并)为dec。我应该将XOR转换为dec值,还是将64(dec)转换为64(hex)值?

DEMO

#include <stdio.h>

int main(void) {

int i;
int xor = 0;
int b;
// $GPGLL,,,,,,V,N*64

char Received[18]= {'$','G','P','G','L','L',',',',',',',',',',',',','V',',','N','*','6','4'};
int loop;

// display array
//for(loop = 0; loop < 18; loop++)
//   printf("%c ", Received[loop]);

for(int i = 1; i<=14; i++)
    xor ^= Received[i];
    printf("%#02x  ", xor);
    printf("%d ", xor);

    b = ((Received[16]-'0') *10) + Received[17]-'0';
    printf("%d ", b);

if(xor == b){
    printf("WORKING!");
}
else{
    printf("not working");
}

return 0;
}

1 个答案:

答案 0 :(得分:1)

您不能将char传递给atoi,因为它希望输入是指向字符的指针char*)。

如果您想使用atoi,则需要自己形成字符串,并将其传递给atoi,如下所示。

 char a[3] = {Received[16],Received[17]};
 b = atoi(a); //Base 10

对{em> base 16(HEX)使用strol如下

 b = strtol(a,NULL,16);

如果您不想使用atoistrol,则可以执行以下操作。

 b = ((Received[16]-'0') *10) + (Received[17]-'0'); //Base 10
 b = ((Received[16]-'0') *16) + (Received[17]-'0'); //Base 16