byte.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package utils
  2. // IsBigEnd 判断是否大端
  3. func IsBigEnd() bool {
  4. var (
  5. v3 uint32
  6. b3 [4]byte
  7. )
  8. v3 = 257
  9. b3[0] = uint8(v3)
  10. b3[1] = uint8(v3 >> 8)
  11. b3[2] = uint8(v3 >> 16)
  12. b3[3] = uint8(v3 >> 24)
  13. if b3[0] == 1 {
  14. return false
  15. }
  16. return true
  17. }
  18. func IntoByte(c int) byte {
  19. var (
  20. b3 [4]byte
  21. )
  22. b3[0] = uint8(c)
  23. b3[1] = uint8(c >> 8)
  24. b3[2] = uint8(c >> 16)
  25. b3[3] = uint8(c >> 24)
  26. if IsBigEnd() {
  27. return b3[3]
  28. }
  29. return b3[0]
  30. }
  31. // HfWord2byte 将一个int16转换为两个byte
  32. func HfWord2byte(obj int) (slice []byte) {
  33. slice = append(slice, IntoByte(obj>>8))
  34. slice = append(slice, IntoByte(obj&0xFF))
  35. return
  36. }
  37. // Word2byte 将一个int转换为四个byte
  38. func Word2byte(obj int) (slice []byte) {
  39. slice = append(slice, IntoByte(obj>>24))
  40. slice = append(slice, IntoByte(obj>>16))
  41. slice = append(slice, IntoByte(obj>>8))
  42. slice = append(slice, IntoByte(obj&0xFF))
  43. return
  44. }
  45. func CalCRC16HJ212(data []byte) uint16 {
  46. var (
  47. crc uint16 = 0xFFFF
  48. iNum uint16 = 0
  49. )
  50. length := len(data)
  51. for i := 0; i < length; i++ {
  52. iNum = uint16(data[i])
  53. crc = (crc >> 8) & 0x00FF
  54. crc = crc ^ iNum
  55. for j := 0; j < 8; j++ {
  56. flag := crc % 2
  57. crc = crc >> 1
  58. if flag == 1 {
  59. crc = crc ^ 0xA001
  60. }
  61. }
  62. }
  63. return crc
  64. }