首页 > 解决方案 > 为什么我的测试会改变字节数组的长度?

问题描述

我有以下测试:

pub(crate) fn from_byte_slice(packet: &[u8]) -> BackendKeyData {
    let mut backend = BackendKeyData::new();

    backend.pid = i32::from_be_bytes(pop(&packet[5..9]));
    backend.key = i32::from_be_bytes(pop(&packet[9..]));

    backend
}

#[test]
fn test_backend_key_data() {
    let bytes = b"\x75\x00\x00\x00\x12\x00\x00\x149\x241\x17\x173\x241\x137";
    let backend = BackendKeyData::from_byte_slice(bytes);
    assert_eq!(backend.pid, 0);
}

当我调试测试时,字节数组会发生变化并变成这个切片:

[0]:117
[1]:0
[2]:0
[3]:0
[4]:18
[5]:0
[6]:0
[7]:20
[8]:57
[9]:36
[10]:49
[11]:23
[12]:23
[13]:51
[14]:36
[15]:49
[16]:19
[17]:55

这是怎么回事,为什么要改变?

标签: rust

解决方案


\x仅用于 2 位十六进制转义。\x137不会生成一个值为 137 的字节,而是一个具有 value0x13的字节后跟 ascii 字符表示的字节7。改为使用以 10 为基数的数组文字:

&[75, 0, 0, 0, 12, 0, 0, 149, 241, 17, 173, 241, 137]

推荐阅读