BytesUtil.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package NetUtils
  2. import (
  3. "bytes"
  4. "encoding/binary"
  5. "github.com/axgle/mahonia"
  6. )
  7. func WriteBYTE(data *bytes.Buffer, val uint8) {
  8. //BYTE 长度:1
  9. buf := make([]byte, 1)
  10. buf[0] = byte(val)
  11. data.Write(buf)
  12. }
  13. func WriteWORD(data *bytes.Buffer, val uint16) {
  14. //WORD 长度:2
  15. buf := make([]byte, 2)
  16. buf[0] = byte(val)
  17. buf[1] = byte(val >> 8)
  18. data.Write(buf)
  19. }
  20. func WriteDWORD(data *bytes.Buffer, val uint32) {
  21. //DWORD 长度:4
  22. buf := make([]byte, 4)
  23. buf[0] = byte(val)
  24. buf[1] = byte(val >> 8)
  25. buf[2] = byte(val >> 16)
  26. buf[3] = byte(val >> 24)
  27. data.Write(buf)
  28. }
  29. func WriteTCHAR(data *bytes.Buffer, size int, val string) {
  30. //TCHAR 长度:由size指定
  31. buf := []byte(val)
  32. data.Write(buf)
  33. //
  34. for i := 0; i < size-len(buf); i++ {
  35. //剩余的补0
  36. data.WriteByte(0)
  37. }
  38. }
  39. func WriteUnicodeTCHAR(data *bytes.Buffer, size int, val string) {
  40. //Unicode TCHAR 长度:size*2
  41. realSize := size * 2
  42. buf := []byte(val)
  43. dataBuffer := make([]byte, realSize)
  44. k := 0
  45. for j := 0; j < len(buf); j++ {
  46. dataBuffer[k] = buf[j]
  47. dataBuffer[k+1] = byte(0)
  48. k = k + 2
  49. }
  50. data.Write(dataBuffer)
  51. //
  52. }
  53. func WriteInt(data *bytes.Buffer, val int) {
  54. //Byte 长度:4
  55. buf := make([]byte, 4)
  56. buf[0] = byte(val)
  57. buf[1] = byte(val >> 8)
  58. buf[2] = byte(val >> 16)
  59. buf[3] = byte(val >> 24)
  60. data.Write(buf)
  61. }
  62. func _ReadInt_(data *bytes.Buffer, val []byte) (int, error) {
  63. return data.Read(val)
  64. }
  65. func ReadWord(val []byte) uint16 {
  66. //binary.LittleEndian.Uint16(rData[4:6])
  67. return binary.LittleEndian.Uint16(val)
  68. }
  69. func ReadDWord(val []byte) uint32 {
  70. return binary.LittleEndian.Uint32(val)
  71. }
  72. func ReadTCHAR(val []byte) string {
  73. return string(val)
  74. }
  75. func UTF8_To_GBK(input string) string {
  76. enc := mahonia.NewEncoder("GBK")
  77. return enc.ConvertString(input)
  78. }
  79. func GBK_To_UTF8(input string) string {
  80. dec := mahonia.NewDecoder("UTF-8")
  81. return dec.ConvertString(input)
  82. }
  83. func U2W(input string) string {
  84. //网狐荣耀版本的服务端TCHAR编码需要这样转换
  85. dec := mahonia.NewDecoder("UTF-16LE")
  86. return dec.ConvertString(input)
  87. }
粤ICP备19079148号