今天我在c风格的编码变量上玩了一点点,以便轻松地与必要的c程序进行通信.我读了https://docs.python.org/2/library/struct.html 我知道\ x开始2位十六进制表示,但是对于一些数字,我得到:
from struct import *
datum=239179
buf = pack(">Q", datum)
buf
'\x00\x00\x00\x00\x00\x03\xa6K'
Run Code Online (Sandbox Code Playgroud)
什么是什么?\ xa6是有效表格.
解包这个变量的工作完全正常,所以它似乎是十六进制的合法方式,但为什么呢?对于类似的问题,朋友写了一个go-program,给了他相同的数字00 00 00 00 00 03 a6 4b.现在,如果我们检查K的十六进制值,那么它是4b.
tldr; 为什么\ xa6K与\ xa6\x4b相同?
谢谢你的帮助 :)
感谢这个解决方案,我觉得有点愚蠢:D
我想玩BasicAuth的东西,因此我需要base64版本的字符串.所以我需要一个函数:String to base_64(String).
在Rust的字符串指南中,大多数时候$ str优先于String.所以我想适应这个想法.
但是使用&str在某种程度上比它看起来更难(我知道我的问题也与问题有关as_slice()).
其他问题的作者可以通过不使用as_slice()解决他的问题,有没有办法继续使用&str for me?
extern crate serialize;
use serialize::base64::{ToBase64,MIME};
fn generate_base_string (n : &str) -> String {
let mut config = serialize::base64::MIME;
config.line_length = None;
let bytes: & [u8] = n.as_bytes();
return bytes.to_base64(config);
}
fn generate_base<'a> (n : &'a str ) -> &'a str {
let mut config = serialize::base64::MIME;
config.line_length = None;
let bytes: & [u8] = n.as_bytes();
let res2: String = bytes.to_base64(config);
let res1: &'a str = res2.as_slice();
return res1;
} …Run Code Online (Sandbox Code Playgroud)