[英]embedding chars in int and vice versa
我有智能卡,我可以存储字节(16的倍数)。 如果我这样做: Save(byteArray, length)
然后我可以做Receive(byteArray,length)
,我想我将按照我存储的相同顺序获取字节数组。 现在,我有这样的问题。 我意识到如果我在这张卡上存储整数,并且其他一些机器(具有不同的字节序)读取它,它可能会得到错误的数据。 因此,我认为可能解决方案是我总是以一种小端方式将数据存储在此卡上,并始终以一种小端方式检索数据(我将编写应用程序进行读写,因此我可以自由地将数字解释为I喜欢。)。 这可能吗? 以下是我提出的问题:
在char数组中嵌入整数:
int x;
unsigned char buffer[250];
buffer[0] = LSB(x);
buffer[1] = LSB(x>>8);
buffer[2] = LSB(x>>16);
buffer[3] = LSB(x>>24);
重要的是我认为无论机器的endiannes如何, LSB函数都应该返回最低有效字节,这样的LSB函数会是什么样子?
现在,重建整数(类似这样):
int x = buffer[0] | (buffer[1]<<8) | (buffer[2]<<16) | (buffer[3]<<24);
正如我所说,我希望这个工作,不管机器的读者是什么,并且写它。 这会有用吗?
“LSB”功能可以通过宏实现如下: -
#define LSB(x) ((x) & 0xFF)
如果x是未签名的。
如果您的C库符合posix标准,那么您可以使用标准函数来完成您尝试编写的代码。 ntohl
, ntohs
, htonl
, htons
(网络主机长,网络主机短,...)。 这样,如果要为big-endian或little-endian架构编译代码,则无需更改代码。 这些函数在arpa/inet.h
中定义(参见http://linux.die.net/man/3/ntohl )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.