我正在使用Oscilloscope组件读取传感器数据。我正在把这些数据发送给一个基地卫星,它正在把数据发送到一台笔记本电脑上。
我想使用这里提供的组件对传感器数据进行AES加密:http://tinyos.cvs.sourceforge.net/viewvc/tinyos/tinyos-2.x-contrib/crypto/index.html
我的计划是将Oscilloscope.h e.h中的数据缓冲区从10减少到8。这会将总数据大小更改为128位(与AES中的块大小相同)。现在唯一的问题是AES块中的每个数组元素都是一个unit_8,但是数据缓冲区的数组元素是uint_16。
有没有什么办法可以将uint_16值‘拆分’成高位和低位?然后,我会将它们作为2个元素存储在我的AES块数组中。
为了澄清,我有一个uint_16,它对应于传感器读取的一些数据。我希望能够将这个值存储在2个uint_8值中。然后,我将加密数据块,将数据包发送到basestation,basestation将解密这些值并将其组合到原始uint_16。
发布于 2012-12-01 19:42:59
当然,只需将最低有效的8位存储在一个变量中,而将最高有效的8位存储在另一个变量中
unit8_t low = value & 0xFF;
uint8_t high = (value >> 8) & 0xFF;(在这两种情况下,逐位and都是多余的,因为指定转换为uint8_t的目的是相同的)。
要从各个部分检索uint16_t值,您需要一个shift和一个按位or,
uint16_t reassembled = ((uint16_t)high << 8) | low;由于整数提升是在移位运算符的参数上执行的,因此如果int大于16位宽,则不需要强制转换为uint16_t,但如果int恰好为16位宽,则移位可能导致未定义的行为,因为值high*256不需要表示为int,因此为了安全起见,在移位之前需要强制转换。如果int是16位宽,则从强制转换获得的uint16_t将被转换为unsigned int -除非您有一个unsigned int的宽度小于int的反常实现-否则转换为int,但这已经足够宽了。
https://stackoverflow.com/questions/13659073
复制相似问题