C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[977] [String] BinaryStrToInt
장성호 [nasilso] 8107 읽음    2010-03-30 16:37
이진 문자열을 int형으로 변환

오늘 직장동료가 "0100101" 같이
이진 문자열을 int형으로 변환하는 방법에 대해 물어와서

같이 함 만들어 봤습니다.


// "0001"    => 1
// "0110"    => 6
// "10000"  => 16

int __fastcall BinaryStrToInt(String s)
{
	char *p=s.c_str();
    int val=*p-'0';
    while(*++p)val=(val<<1)|(*p-'0');
    return val;
}
//---------------------------------------------------------------------------



위 코드의 문제점은?
문자열에 "0" 또는 "1"이 아닌 값이 들어있는 경우에 문제가 되구요
문자열의 길이가 32Byte넘어면 shift되어서 원하는 값이 나오지 않을수 있겠네요



그럼..
Nibble [gameover]   2010-04-07 10:48 X
널 문자열이 들어오면 문제가 되겠네요. 최적화를 너무 신경쓰신듯.
어차피 0과 1외의 입력에는 오작동할꺼라면

int __fastcall BinaryStrToInt(String s)
{
    char *p = s.c_str();
    int val = 0;
    while(*p) val = (val << 1) | (*p++ & 1);
    return val;
}

이렇게 하셔도 됩니다.

+ -

관련 글 리스트
977 [String] BinaryStrToInt 장성호 8107 2010/03/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.