如何比较 Perl 中的打包值?
我想使用 Perl 中的 pack() 函数来编码一些数据。然后我想将我的打包结构与另一个打包结构进行比较。我希望这个比较是针对这个打包结构的字节值。
根据文档, cmp 使用当前区域设置来确定如何比较字符串。但我不希望将任何情报应用于比较。我想要最接近 memcmp() 的东西。显然我不能使用 <=>
来比较我的打包对象,因为它们不是数字。
在 Perl 中比较打包字符串的最佳方法是什么?
旁注:我一直在阅读 这篇关于 Perl 中高效排序的文章,其中指出简单的sort 函数使用类似 memcmp 的算法来比较结构。我想知道如何在不使用排序的情况下实现这样的比较。
I want to use the pack() function in Perl to encode some data. Then I want to compare my packed structure to another packed structure. I want this compare to be on the byte values of this packed structure.
According to the documentation, cmp uses the current locale to determine how to compare strings. But I don't want any intelligence applied to the comparison. I want whatever is closest to a memcmp(). Obviously I cannot use <=>
for comparing my packed objects as they are not numbers.
What is the best way to compare packed strings in Perl?
Sidenote: I have been reading this article on efficient sorting in Perl which notes that the plain sort function uses a memcmp-like algorithm for comparing structures. I'm wondering how to achieve such a comparison without having to use sort.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
禁用块的区域设置注意事项并照常使用
cmp
:perlop 文档提供
然后在 perllocale
例如,运行
输出
Disable locale considerations for the block and use
cmp
as usual:The perlop documentation provides
and then in perllocale
For example, running
outputs
先扩展,然后收缩。 例如,比较结构的十六进制表示形式,它仅使用 ASCII 字符和不能与您提到的区域设置问题发生冲突。
Expand, then contract. Compare for example the hex representation of your structures, which only uses ASCII characters and cannot run afoul of the locale problem you mention.
在这里大声思考 - 按位运算符会有帮助吗?就像对两个相同的字符串进行异或运算会得到一个所有设置为 0 的位串。
http://perldoc.perl.org/perlop.html#Bitwise-String-Operators
Thinking aloud here - will bitwise operators help? Like doing a xor on two identical strings will give a bitstring with everything set to 0.
http://perldoc.perl.org/perlop.html#Bitwise-String-Operators