- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 XY 坐标的 WKB 表示形式转换为 YX 格式。我使用的代码适用于 42 个字符的 WKB 字符串,但是当我在 50 个字符的字符串上使用它时,它会给出一个奇怪的 YX 输出。我正在运行 Python 2.7.5。
这是我的代码:
from osgeo import ogr
from binascii import unhexlify
## converts a WKB string into a YX coordinate
input = raw_input("Enter WKB string: ")
wkb = unhexlify(input)
point = ogr.CreateGeometryFromWkb(wkb)
print "%.3f,%.3f" % (point.GetY(), point.GetX())
# no work 0101000020E6100000BD30B7B921A85AC07513F26D8A1A4840
# work 0101000000C458A65F22A85AC0E412471E881A4840
当我输入 42 个字符的字符串时,我的结果很好:点(-106.627098 48.207279)
但是当我输入 50 个字符的字符串时,我得到:3555134728476017298973319676299352450538378468906911626773527538488363036844773115899936046188061344719932995831597021265 92.000,-0.000
当我只打印点时,我得到:点(-0.0too_big)
谁能帮我解释一下吗?
最佳答案
这个 50 个字符的字符串从哪里来?它的 header 0101000020
似乎不是有效的 WKB header ,由于第一个 01
意味着小字节序,因此几何类型被翻译为 0x20000001
,这是未定义的。
其次,WKB 表示的点长度是 42,而不是 50,因为坐标是 double (8 字节长),因此十六进制化时有 16 个字符长。请参阅您的工作示例:
>>> s = 'C458A65F22A85AC0E412471E881A4840'
>>> struct.unpack('<d', unhexlify(s[:16]))
(-106.62709799999999,)
>>> struct.unpack('<d', unhexlify(s[16:]))
(48.207279,)
那么很清楚为什么你的第二个示例不起作用,因为会发生如下情况(不确定 osgeo 是如何提取 16 个字符的子字符串):
>>> s = 'E6100000BD30B7B921A85AC07513F26D8A1A4840'
>>> struct.unpack('>d', unhexlify(s[-32:-16]))
(-5.939309002701494e-14,)
>>> struct.unpack('>d', unhexlify(s[-16:]))
(9.359519850637786e+255,)
关于python - 转换 50 个字符串时 Unhexlify 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20835958/
每当程序打开文件时,它都会将该文件视为二进制数据。它将其转换为更高级的解释语言,即八进制、十六进制、ascii 等。在这种情况下,它在左侧 Pane 中显示十六进制,在右侧 Pane 中显示 ansi
是否有类似 Python 的 unhexlify 用于 objc/cocoa 的东西? >>> from binascii import unhexlify>>> help(unhexlify)Hel
所以我使用 this SO answer 中的代码创建2路字母数字加密函数。 基本上,函数如下所示: from Crypto import Random from Crypto.Cipher impo
我正在尝试将 ASCII 字符串来回转换为其二进制表示,如下所示。 s=chr(0)*15 + chr(0x01) bst = bin(int(binascii.hexlify(s), 16)) n
我想将 XY 坐标的 WKB 表示形式转换为 YX 格式。我使用的代码适用于 42 个字符的 WKB 字符串,但是当我在 50 个字符的字符串上使用它时,它会给出一个奇怪的 YX 输出。我正在运行 P
请帮忙...我正在尝试学习 C 类型转换。 此代码仅将一些十六进制字符转换为 1, 2, 3,效果很好。对于其他字符,也更改字符串或减少字符串长度,转换失败... 我将把代码放在下面...任何人都可以
这个问题在这里已经有了答案: 关闭 13 年前。 Possible Duplicate: How to convert hex to a byte array? 我正在 C# 中寻找一个 pytho
我的代码看起来有点像 module Lib where import Data.ByteString (ByteString) import Data.ByteString.Lazy (fromStr
我对Python不熟悉,需要从2.7移植到3.5。在 2.7 中: >>> unhexlify( '2FE2' )[0] '/' 在 3.5 中: >>> unhexlify( '2FE2' )[0]
我对此进行了广泛的搜索,但找不到解决此问题的帖子。我有一个简单的字符串,它是从 82001B014042 的调制解调器收到的。我想忽略 82001B01 的前面的 header 并解码十六进制数字 4
我是一名优秀的程序员,十分优秀!