您好,我正在编写一个库,用于通过rs-232串行连接与外部设备进行通信。如何保证字符的位数和与外部设备的通信短小
通常我必须传递一个包含8位= 1字节字符或16位= 2字节数的命令。我如何以便携式的方式做到这一点?
主要问题
从阅读其他问题似乎标准不保证1字节= 8比特, 在
的基本存储单元(标准$ 1.7/1中定义) + ++内存模型是字节。字节是至少大到足以包含 基本执行 字符集的任何成员,并且由比特的 连续序列,所述 数目为 实现定义。
如何保证字符的位数?我的设备准确地预计8位,而不是至少8位。
我意识到几乎所有的实现都有1byte = 8位,但我很好奇如何保证它。
短期> 2字节的校验
我希望你不介意,我也想运行我提出了简短的解决方案 - 通过你> 2字节的转换。我是字节转换和跨平台可移植性的新手。
为了保证短期我想我会需要需要
做的sizeof(短)的字节数。如果sizeof(short)= 2转换为字节并检查字节排序(如here)
如果sizeof(short)> 2则将short转换为字节,检查字节排序(如here),然后检查最重要的字节是空的并删除它们?
这是正确的做法?有没有更好的办法?
非常感谢
是的,我认为你的权利。我正在使用boost.asio库来进行低级别通信,所以这不会发生在我身上。 char = 16位系统上的用户是否会无法使用该库?如果我要求它发送字母'a',这将是我设备预期的位数的两倍? – Tom 2010-12-19 10:07:30
@Tom:我已经更新了我的答案。 – ruslik 2010-12-19 10:15:02
谢谢,我仍然有点困惑(抱歉)。所以从char = 16位实现:char c ='a';发送(C);会发送一半的角色?是可以将16位字符转换为8位来发送我的设备期望的位? – Tom 2010-12-19 10:26:30