我正在向智能卡写一些数据。
当我想在卡片上存储十六进制字符串时,您可以查看这是如何完成的:Formatting and writing data - 也可以从这篇文章中看到我没有endiannes问题。
鉴于此,并且鉴于通常数据存储在设备上,如下所示:
unsigned char sendBuffer[20]; // This will contain the data I want to store + some header information
sendBuffer[0]=headerInfo;
sendBuffer[1]=data[0]; // data to store, byte array; should be 16 bytes or multiple of 16
sendBuffer[2]=data[1];
...
sendBuffer[16]=data[15];
现在,我们调用call:Send(sendBuffer, length).
并完成,data
被写入。上面的链接也提到了如何回读数据。
我感兴趣,现在说我想在卡片上存储整数153(十进制),我是怎么做到的? (我想我基本上必须把它嵌入sendBuffer
数组 - 右边?)
或者如果我想存储/发送字符串:“Hello world 123xyz”,我该怎么办呢?
PS。我通常是接收器,我需要读取数据。根据我读取的内存块,我可能事先知道我是否存储了int或字符串。
答案 0 :(得分:-1)
你似乎确实使这比它需要的更复杂。因为没有endianess问题,从缓冲区读取或写入int很容易。
// writing
*(int*)(sendBuffer + pos) = some_int;
// reading
some_int = *(int*)(sendBuffer + pos)
pos
是sendBuffer
中字节的偏移量。
要将字符串复制到缓冲区或从缓冲区复制字符串,如果字符串为nul,则只使用strcpy
;如果不是,则使用memcpy
。 E.g。
// writing
strcpy(sendBuffer + pos, some_string);
// reading
strcpy(some_string, sendBuffer + pos);
显然你必须小心,你有可用的内存来存储字符串。