main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package yu_hex
  2. import (
  3. yu_const "gogs.qqck.cn/s/tools/const"
  4. )
  5. // Lower
  6. //
  7. // @Description: 编码为小写hex
  8. func Lower(buf []byte) string {
  9. j_buf := make([]byte, 0, len(buf)*2)
  10. for _, j_byte := range buf {
  11. j_buf = append(j_buf, yu_const.HexLower[j_byte>>4])
  12. j_buf = append(j_buf, yu_const.HexLower[j_byte&0x0f])
  13. }
  14. return string(j_buf)
  15. }
  16. // Upper
  17. //
  18. // @Description: 编码为大写hex
  19. func Upper(buf []byte) string {
  20. j_buf := make([]byte, 0, len(buf)*2)
  21. for _, j_byte := range buf {
  22. j_buf = append(j_buf, yu_const.HexUpper[j_byte>>4])
  23. j_buf = append(j_buf, yu_const.HexUpper[j_byte&0x0f])
  24. }
  25. return string(j_buf)
  26. }
  27. const _reverseHexTable = "" +
  28. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  29. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  30. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  31. "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\xff\xff\xff\xff\xff\xff" +
  32. "\xff\x0a\x0b\x0c\x0d\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  33. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  34. "\xff\x0a\x0b\x0c\x0d\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  35. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  36. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  37. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  38. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  39. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  40. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  41. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  42. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +
  43. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
  44. func Decode(s string) []byte {
  45. if s == "" || len(s)%2 == 1 {
  46. return nil
  47. }
  48. j_buf := make([]byte, 0, len(s)/2)
  49. for j_i := 0; j_i < len(s); j_i += 2 {
  50. j_left := _reverseHexTable[s[j_i]]
  51. j_right := _reverseHexTable[s[j_i+1]]
  52. if j_left > 0x0f || j_right > 0x0f {
  53. return nil
  54. }
  55. j_buf = append(j_buf, (j_left<<4)|j_right)
  56. }
  57. return j_buf
  58. }