我在Mongo中有二进制数据,最初是C#Guid:
BinData(3,"QaQPthSsOkat01BUvxApZQ==")
我使用10gen的Ruby驱动程序提取数据,并希望将值作为字符串。我正在使用unpack并且我得到的是我认为的ascii代码数组,但仔细观察后会有超过127的值。
puts foo["FooID"].unpack("U*")
>> 65
>> 164
>> 15
>> 182
>> 20
>> 172
>> 58
>> 70
>> 173
>> 211
>> 80
>> 84
>> 191
>> 16
>> 41
>> 101
puts foo["FooID"].to_s.unpack("A*")
>> A???:F??PT?)e
我应该如何解析这些数据?是否有我应该使用的解压缩选项,或者我需要调用BSON方法吗?
我正在使用Ruby 1.9.2和10gen的最新mongo gem。如果您有任何其他详细信息,请在评论中告诉我们,谢谢。
答案 0 :(得分:1)
GUID/UUID是一个16字节的整数,所以unpack('C*')
可能就是你想要的。但是,您应该将结果与C#进行比较,以确保您获得正确的字节顺序。我猜测C#将UUID视为16字节的简单列表而不是大整数,因此字节顺序可能不是问题; OTOH,最好检查并确定。
根据您需要对GUID执行的操作,您可能根本不需要解压缩它,只需将其视为16字节的不透明序列即可。