tlv.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package yu_tencent
  2. type tlv struct{}
  3. var Tlv tlv
  4. func (t tlv) From(buf []byte, tlv uint16, val ...byte) []byte {
  5. j_len := len(val)
  6. buf = append(buf, byte(tlv>>8), byte(tlv), byte(j_len>>8), byte(j_len))
  7. buf = append(buf, val...)
  8. return buf
  9. }
  10. func (t tlv) FromInt16(buf []byte, tlv uint16, val ...int16) []byte {
  11. j_len := len(val) * 2
  12. buf = append(buf, byte(tlv>>8), byte(tlv), byte(j_len>>8), byte(j_len))
  13. for _, j_val := range val {
  14. buf = append(buf, byte(j_val>>8), byte(j_val))
  15. }
  16. return buf
  17. }
  18. func (t tlv) FromUint16(buf []byte, tlv uint16, val ...uint16) []byte {
  19. j_len := len(val) * 2
  20. buf = append(buf, byte(tlv>>8), byte(tlv), byte(j_len>>8), byte(j_len))
  21. for _, j_val := range val {
  22. buf = append(buf, byte(j_val>>8), byte(j_val))
  23. }
  24. return buf
  25. }
  26. func (t tlv) FromInt32(buf []byte, tlv uint16, val ...int32) []byte {
  27. j_len := len(val) * 4
  28. buf = append(buf, byte(tlv>>8), byte(tlv), byte(j_len>>8), byte(j_len))
  29. for _, j_val := range val {
  30. buf = append(buf, byte(j_val>>24), byte(j_val>>16), byte(j_val>>8), byte(j_val))
  31. }
  32. return buf
  33. }
  34. func (t tlv) FromUint32(buf []byte, tlv uint16, val ...uint32) []byte {
  35. j_len := len(val) * 4
  36. buf = append(buf, byte(tlv>>8), byte(tlv), byte(j_len>>8), byte(j_len))
  37. for _, j_val := range val {
  38. buf = append(buf, byte(j_val>>24), byte(j_val>>16), byte(j_val>>8), byte(j_val))
  39. }
  40. return buf
  41. }
  42. func (t tlv) FromInt64(buf []byte, tlv uint16, val ...int64) []byte {
  43. j_len := len(val) * 8
  44. buf = append(buf, byte(tlv>>8), byte(tlv), byte(j_len>>8), byte(j_len))
  45. for _, j_val := range val {
  46. buf = append(buf, byte(j_val>>56), byte(j_val>>48), byte(j_val>>40), byte(j_val>>32), byte(j_val>>24), byte(j_val>>16), byte(j_val>>8), byte(j_val))
  47. }
  48. return buf
  49. }
  50. func (t tlv) FromUint64(buf []byte, tlv uint16, val ...uint64) []byte {
  51. j_len := len(val) * 8
  52. buf = append(buf, byte(tlv>>8), byte(tlv), byte(j_len>>8), byte(j_len))
  53. for _, j_val := range val {
  54. buf = append(buf, byte(j_val>>56), byte(j_val>>48), byte(j_val>>40), byte(j_val>>32), byte(j_val>>24), byte(j_val>>16), byte(j_val>>8), byte(j_val))
  55. }
  56. return buf
  57. }
  58. func (t tlv) FromB(buf []byte, tlv uint16, val ...[]byte) []byte {
  59. var j_len int
  60. for _, j_val := range val {
  61. j_len += len(j_val)
  62. }
  63. buf = append(buf, byte(tlv>>8), byte(tlv), byte(j_len>>8), byte(j_len))
  64. for _, j_val := range val {
  65. buf = append(buf, j_val...)
  66. }
  67. return buf
  68. }
  69. func (t tlv) FromS(buf []byte, tlv uint16, val ...string) []byte {
  70. var j_len int
  71. for _, j_val := range val {
  72. j_len += len(j_val)
  73. }
  74. buf = append(buf, byte(tlv>>8), byte(tlv), byte(j_len>>8), byte(j_len))
  75. for _, j_val := range val {
  76. buf = append(buf, j_val...)
  77. }
  78. return buf
  79. }