Kodigi SOCKS5-pordojn en Go kiel du bajtojn grand-endian
Uzu la helpilojn binary.BigEndian de Go por kampoj de SOCKS5-pordo anstataŭ tranĉi duuman ĉenon de variabla longo.
Kampoj de SOCKS5-pordo estas du sensignaj bajtoj en reta bajta ordo: la plej signifa bajto venas unue. En Go, kodigu jam validigitan uint16 rekte:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Importu encoding/binary. Por pordo 1080, la rezultaj deksesumaj bajtoj estas 04 38. Por pordo 4, ili estas 00 04; komenca nulo estas parto de la kampo de fiksa larĝo.
Se la enigo komenciĝas kiel pli granda entjero aŭ ĉeno, validigu ĝian nombran intervalon antaŭ ol konverti al uint16. Konverto povas forĵeti altajn bitojn anstataŭ raporti valoron ekster intervalo.
En SOCKS5-respondo, serialigu BND.PORT, la ligitan pordan kampon de la servilo. Ne kopiu la petitan celan pordon en tiun kampon nur ĉar ambaŭ okupas du bajtojn. Metu la kodigitan kampon post la adreso de la respondo, kies longo dependas de ATYP.