代码之家  ›  专栏  ›  技术社区  ›  newbie99

如何向字符串片段暗示特定数量的字节

  •  0
  • newbie99  · 技术社区  · 2 年前

    可能看起来像一个愚蠢的问题,然而,我一直在尝试将字符串片段(作为函数的参数)限制为字节数。

    这就是我试过的

    fn padd_address(addr: &str) -> Result<web3::types::H256, std::error::Error> {
      if addr.strip_prefix("0x").unwrap().as_bytes().len() > std::mem::size_of::<[u8; 20]>() {
        std::error::Error()
      }
    
      let padded = &format!("0x{}", format!("{:0>64}", addr))[..];
      H256::from_str(padded).unwrap()
    }
    

    现在假设我有一个这样的地址 let addr = "0xdAC17F958D2ee523a2206206994597C13D831ec7"; 0x

    现在如果我要 println!("{:?}", addr.strip_prefix("0x").unwrap().as_bytes().len()) 我得到的是40个字节,而不是20个字节,这是合同地址的实际大小。

    addr 只有20个字节?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Masklinn    2 年前

    我得到的是40个字节,而不是20个字节,这是合同地址的实际大小。

    不,你的地址是

    dAC17F958D2ee523a2206206994597C13D831ec7
    

    实际上是40字节。 as_bytes() 只返回字符串下面的字节数据,因此返回

    b"dAC17F958D2ee523a2206206994597C13D831ec7"
    

    它不会解码任何东西。顺便说一句,这使得它在语法开销方面毫无用处 it's literally what str::len does

    hex