如何将字节转换为秒



我有一个套接字服务器监听来自GSM设备的UDP数据包。有些数据是以多字节的形式输入的,比如时间,它需要多字节来保证准确性。下面是一个示例:

179,248,164,14

字节以十进制表示。我的目标是将其转换为秒:

245692595

我正试图这样做,却被告知:

"你必须把这4个字节放在一个小端序格式的长整数中。如果您正在使用Python读取和编码数据,则需要查看使用.read()和struct.unpack()方法来成功地将其转换为整数。结果值是自01/01/2000以来的秒数。"

所以,我试着这样做:

%w(179 248 164 14).sort.map(&:to_i).inject(&:+)
 => 605 

显然我得到了错误的答案

您应该使用packunpack方法来完成此操作:

[179,248,164,14].pack('C*').unpack('I')[0]
# => 245692595

这并不是要把它们加在一起。你算错了。使用inject的正确方法是:

 [179,248,164,14].reverse.inject { |s,v| s * 256 + v }
 # => 245692595

注意,当表示大于一个字节长的二进制数时,必须考虑字节顺序。

如果原始数据已经是二进制字符串,您将不必执行pack操作,可以直接进入unpack阶段。

相关内容

  • 没有找到相关文章

最新更新