이진 문자열을 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되어서 원하는 값이 나오지 않을수 있겠네요
그럼..
|
어차피 0과 1외의 입력에는 오작동할꺼라면
int __fastcall BinaryStrToInt(String s)
{
char *p = s.c_str();
int val = 0;
while(*p) val = (val << 1) | (*p++ & 1);
return val;
}
이렇게 하셔도 됩니다.