C中的另一个反转char数组

时间:2018-12-12 17:18:06

标签: c bit-manipulation bit mifare

该代码将在付款设备(POS)上运行。为此,我必须使用旧版C(而不是C#或C ++)。

我正在尝试准备一个简单的Mifare卡读/写软件数据。以下文档供我参考,我试图实现第9页上的8.6.2.1值块说明。 http://www.nxp.com/documents/data_sheet/MF1S50YYX_V1.pdf

我只是非常了解C。我在Internet上的所有搜索都失败了。根据文件:

1-有一个值为1234567的整数变量。

2-有char array[4]的十六进制值应为0x0012D687

3-我应该反转char数组[4]并达到0xFFED2978

的值

我需要做其他一些事情,但是我仍然停留在上面的第三位。我最近尝试过的是

int value = 1234567;
char valuebuffer[4];
char invertbuffer[4];

sprintf(valuebuffer, "%04x", value);  
for(i = 0;  i < sizeof(valuebuffer);  i++ )
{   
    invertbuffer[i] ^= valuebuffer[i];  
}

打印时,我在invertbuffer中读取了一些其他值,而不是0xFFED2978

2 个答案:

答案 0 :(得分:0)

似乎您正在使它变得比所需的更加复杂。您可以在int变量上执行二进制反转,而不必弄乱单个字节。

int value = 1234567;
int inverted= ~ value;

printf("%x\n",value);
printf("%x\n",inverted);

提供您的输出

  

12d687

     

ffed2978

答案 1 :(得分:0)

首先,必须使用stdint.h中的类型,而不要使用@event_report = Event.find_by(id: params[:id]) 中的类型,因为后者具有实现定义的签名,因此总体上不适合保存原始二进制数据。

排序后,您可以使用并集以获得最大的灵活性:

char

值得注意的是,u8的访问顺序取决于字节顺序。在处理RFID之类的东西时,这可能很方便,RFID不一定具有与您的MCU相同的网络耐久性。