在字节数组存储中嵌入int / string

时间:2013-09-20 07:14:32

标签: c++

我正在向智能卡写一些数据。

当我想在卡片上存储十六进制字符串时,您可以查看这是如何完成的: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或字符串。

1 个答案:

答案 0 :(得分:-1)

你似乎确实使这比它需要的更复杂。因为没有endianess问题,从缓冲区读取或写入int很容易。

// writing
*(int*)(sendBuffer + pos) = some_int;

// reading
some_int = *(int*)(sendBuffer + pos)

possendBuffer字节的偏移量。

要将字符串复制到缓冲区或从缓冲区复制字符串,如果字符串为nul,则只使用strcpy;如果不是,则使用memcpy。 E.g。

// writing
strcpy(sendBuffer + pos, some_string);

// reading
strcpy(some_string, sendBuffer + pos);

显然你必须小心,你有可用的内存来存储字符串。