Wireshark在协议树中将带符号的32位值添加为double

时间:2016-02-10 16:42:35

标签: wireshark wireshark-dissector

在我的自定义解剖器中,我在数据报中有32位带符号的 gint32 值,其标题字段描述为

 &hf_TargetPosition,
{ "Target Position", "machine.RxPdo",
FT_INT32, BASE_DEC, NULL, 0xffffffff,
NULL, HFILL }

在将此项添加到proto_tree之前,我需要使用double值来缩放它。 由于没有返回签名gint32的tvb_get *函数,我使用 tvb_get_letohl 函数获取32位有符号值

gint32 stmp32 = (gint32)tvb_get_letohl(tvb, suboffset);
gdouble tpos = (gdouble)stmp32 * 0.000001;

如何将tpos添加到proto_tree?

作为一种解决方法,我尝试不将 tpos 强制转换为double并使用 proto_tree_add_int_format_value 函数

gint32 tpos = stmp/1000000;
proto_tree_add_int_format_value(Dout_tree, hf_TargetPosition, tvb, suboffset, 4, tpos, "%lf");

但是在显示的树中无法获得所需的带符号小数点/浮点值。

1 个答案:

答案 0 :(得分:1)

  

我需要它作为原始积分值并将其显示为小数单位。

然后你想要

gint32 stmp32;

    ...

stmp32 = (gint32)tvb_get_letohl(tvb, suboffset);
proto_tree_add_int_format_value(Dout_tree, hf_TargetPosition, tvb, suboffset, 4, stmp32, "%lf", stmp32/1000000.0);