2014-11-21 2 views
0

나는 CRLF 비교를 위해 다음 코드 스 니펫을 가지고 있습니다. 컴파일되고 실행되지만 이상한 구문처럼 보입니다. 왼쪽 및 오른쪽면 모두를 주조하지 않고 비교하는 자연스러운 방법이 있는지 궁금합니다.녹슬어서 바이트, 문자열 및 비교

pub const CR: u8 = b'\r'; 
pub const LF: u8 = b'\n'; 
pub const CRLF: [u8, ..2] = [CR,LF]; // this probably should have a different type? 

let mut cur_line: String; 
// *snip getting line value* 

// casting both the left and right hand side, is there a better way? 
if cur_line.as_bytes() == &CRLF { 
    break; 
} 

답변

2

나는 &'static [u8] 사용하십시오 :

pub const CRLF: &'static [u8] = b"\r\n"; // or &[CR, LF] 

난 당신이 사용하고있는 선 유형에주의해야한다고도 말할 것; cur_line은 UTF-8로 보장됩니까? 그렇지 않은 경우 String이 아닌 Vec<u8>이어야하고 CRLF은 잠재적으로 &'static str, "\r\n"이어야합니다. 그러나 어쨌든, 비교 cur_line.as_bytes() == CRLF은 괜찮습니다. ([u8, ..2] 대신 &'static [u8]이되면 &은 필요 없습니다.)

+0

감사합니다. 내 라인을 다른 곳에서 읽을 때 BufferedStream :: read_line()'에서 내 라인을 얻고 있는데,'& str :: read_line()'을 사용합니다. – Victory