以太坊RLP包用法

标签:底层链开发
发布时间:2018年12月27日 价值:20000.00 / 共识:23
  1. /*
  2. rlp包用法
  3. rlp目的是可以将常用的数据结构,uint,string,[]byte,struct,slice,array,big.int等序列化以及反序列化.
  4. 要注意的是rlp特别不支持有符号数的序列化
  5. 具体用法见下
  6. */
  7. //编码
  8. type TestRlpStruct struct {
  9. A uint
  10. B string
  11. C []byte
  12. BigInt *big.Int
  13. }
  14. //rlp用法
  15. func TestRlp(t *testing.T) {
  16. //1.将一个整数数组序列化
  17. arrdata, err := rlp.EncodeToBytes([]uint{32, 28})
  18. fmt.Printf("unuse err:%v\n", err)
  19. //fmt.Sprintf("data=%s,err=%v", hex.EncodeToString(arrdata), err)
  20. //2.将数组反序列化
  21. var intarray []uint
  22. err = rlp.DecodeBytes(arrdata, &intarray)
  23. //intarray 应为{32,28}
  24. fmt.Printf("intarray=%v\n", intarray)
  25. //3.将一个布尔变量序列化到一个writer中
  26. writer := new(bytes.Buffer)
  27. err = rlp.Encode(writer, true)
  28. //fmt.Sprintf("data=%s,err=%v",hex.EncodeToString(writer.Bytes()),err)
  29. //4.将一个布尔变量反序列化
  30. var b bool
  31. err = rlp.DecodeBytes(writer.Bytes(), &b)
  32. //b:true
  33. fmt.Printf("b=%v\n", b)
  34. //5.将任意一个struct序列化
  35. //将一个struct序列化到reader中
  36. _, r, err := rlp.EncodeToReader(TestRlpStruct{3, "44", []byte{0x12, 0x32}, big.NewInt(32)})
  37. var teststruct TestRlpStruct
  38. err = rlp.Decode(r, &teststruct)
  39. //{A:0x3, B:"44", C:[]uint8{0x12, 0x32}, BigInt:32}
  40. fmt.Printf("teststruct=%#v\n", teststruct)
  41. }
  • 分享 收藏
0 条评论
  • 这篇文章暂无评论,赶紧评论一下吧~