1

Pythonでは、コードは次のとおりです

envimsg = struct.pack("!LHL", 1, 0, int(jsonmsg["flow_id"], 16)) + \
          struct.pack("!HQH", 1, int(flow["src id"],16), 0) + \
          struct.pack("!HQH", 1, int(flow["dst id"],16), int(flow["dst port"],16)) + \
          struct.pack("!H", 0) + \
          struct.pack("!HHHLL", int(jsonmsg["app_src_port"],10), int(jsonmsg["app_dst_port"],10), int(jsonmsg["app_proto"],10), int(jsonmsg["app_src_ip"],10), int(jsonmsg["app_dst_ip"],10))

ラインで

struct.pack("!H", 0) + \

このエラーが発生しました:

  File "./Translate_2503.py", line 205, in lavi2envi
    struct.pack("!H", 0) + \
struct.error: integer out of range for 'L' format code

H(unsigned short)でパックしようとしているので、これは奇妙です。

手がかりはありますか?

私のPythonバージョン2.7.3。CPUアーキは32ビットです。

4

2 に答える 2

0

エラーラインがこのラインを指している場合でも、エラーはそこにありません。Pythonインタープリターでこの命令を実行しても、エラーは発生しません。

import struct
struct.pack("!H", 0)
>>> '\x00\x00'

エラーは「L」フォーマットコードに不平を言っているので、これは理にかなっています。したがって、エラーはこのフォーマットを使用するものにあります。

'L'がunsignedlongに使用され、メッセージが範囲外であると文句を言う場合、エラーは、使用される変数の1つ(または複数)が負であり、unsignedlongの範囲外を生成するためです。

これは、Pythonインタープリターで確認できます。

import struct

struct.pack("!HHHLL", 1, 2, 3, 4, 5)
>>> '\x00\x01\x00\x02\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05'

struct.pack("!HHHLL", 1, 2, 3, -4, 5)
>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
struct.error: integer out of range for 'L' format code
于 2016-10-15T16:22:52.323 に答える
-2

ほとんどの場合、問題は次のいずれかの値にあります。

jsonmsg["flow_id"]
jsonmsg["app_src_ip"]
jsonmsg["app_dst_ip"]
于 2012-08-16T16:20:02.533 に答える