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

标签 c arrays

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

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;
}

最佳答案

您无法将char传递给atoi,因为它期望其输入是指向char的指针(char*).

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

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

使用 strol 表示基数 16(十六进制),如下所示

 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

关于c - 将两个数组元素合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52514119/

相关文章:

c - 指针的数组表示法

c - 为什么不能返回strerror()的结果

c - 是否可以读取另一个线程的程序计数器?

c - 我怎样才能摆脱 QAC 警告?

java - 在 Java Gui 应用程序中打印数组的各个部分

c - 接收一维数组并在那里打印其值的函数?

android - 如何将字符数组从 JNI 发送到 android

java - 尝试对要显示在表行中的数组进行排序

arrays - 在coffeescript中声明稀疏数组

php - 错误的 json 数组 Python post 请求到 PHP