Я пишу плагин диссектора Wireshark для протокола, который не делает hton
это - данные, и я должен извлечь 64-разрядное значение данных, не делая никаких преобразований порядка байтов.
Есть ли версия tvb_get_ntoh64
включенный в библиотеки Wireshark, который не делает ntoh
?
Я нашел ответ на свой вопрос. В документе wireshark \wireshark\doc\README.developer рассматривается этот вопрос:
Не извлекайте значения с маленьким индианным номером используя "tvb_get_ntohs() или "tvb_get_ntohl()", а затем использовать "g_ntohs()", "g_htons()", "g_ntohl()", или "g_htonl()" на полученном значении. - рассматриваемые процедуры g_ конвертируют между сетевым порядком байтов (big-endian) и host порядком байтов, а не little-endian порядком байтов; не все машины, на которых работает Wireshark являются little-endian, даже если ПК являются. Получите эти значения, используя "tvb_get_letohs()" и "tvb_get_letohl()".
Заглянув в tvbuff.h
, я увидел, что есть и другие варианты:
extern guint16 tvb_get_letohs(tvbuff_t*, const gint offset);
extern guint32 tvb_get_letoh24(tvbuff_t*, const gint offset);
extern guint32 tvb_get_letohl(tvbuff_t*, const gint offset);
extern guint64 tvb_get_letoh64(tvbuff_t*, const gint offset);
Размещаю, чтобы люди, задающие этот вопрос в будущем, смогли найти ответ.