--- snmplib/mib.c	2008-07-30 00:57:19.000000000 -0700
+++ snmplib/mib.bigip.c	2009-10-09 18:29:18.000000000 -0700
@@ -3842,7 +3842,15 @@
                 len = sprintf(p, "%lu.%lu.%lu.%lu", objid[0], objid[1], objid[2], objid[3]);
                 p += len;
                 if (addr_type == IPV4Z) {
-                    zone = ntohl((long)objid[4]);
+                    // data type of objid is oid, which is defined in 
+                    // include/net-snmp/types.h. It could be u_char or u_long.
+                    // in order to get correct zone, do some conversion here
+                    unsigned char zone_oid[4];
+                    for (i = 0; i < 4; i++) {
+                         zone_oid[i] = objid[4+i];
+                    }
+                    uint32_t *rd = (uint32_t *)(zone_oid);
+                    zone = ntohl(*rd);
                     len = sprintf(p, "%%%lu", zone);
                     p += len;
                 }
