该代码将在付款设备(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
答案 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相同的网络耐久性。