2020.11.02
Javaプログラミング
2進数を整数に変換
"00010001" → 17 "11100111" → 231
ここで説明するのは、上記のようなメソッドの作り方です。
code[ 0 ] = 49; // '1'のASCIIコード code[ 1 ] = 49; // '1'のASCIIコード code[ 2 ] = 48; // '0'のASCIIコード code[ 3 ] = 48; // '0'のASCIIコード code[ 4 ] = 49; // '1'のASCIIコード
となります。各文字をASCIIコードに変換された値を格納します。
int result = 0; result = (int)code[ 0 ] - 48; // resultの値 : 1 result = ( result * 2 ) + (int)code[ 1 ] - 48; // resultの値 : 3 ( 1 * 2 + 1 ) result = ( result * 2 ) + (int)code[ 2 ] - 48; // resultの値 : 6 ( 3 * 2 + 0 ) result = ( result * 2 ) + (int)code[ 3 ] - 48; // resultの値 : 12 ( 6 * 2 + 0 ) result = ( result * 2 ) + (int)code[ 4 ] - 48; // resultの値 : 25 ( 12 * 2 + 1 )
また、以下のように48の代わりに'0'を直接ソースコードに書いて計算させることもできます。
int result = 0; result = (int)code[ 0 ] - '0'; // resultの値 : 1 result = ( result * 2 ) + (int)code[ 1 ] - '0'; // resultの値 : 3 ( 1 * 2 + 1 ) result = ( result * 2 ) + (int)code[ 2 ] - '0'; // resultの値 : 6 ( 3 * 2 + 0 ) result = ( result * 2 ) + (int)code[ 3 ] - '0'; // resultの値 : 12 ( 6 * 2 + 0 ) result = ( result * 2 ) + (int)code[ 4 ] - '0'; // resultの値 : 25 ( 12 * 2 + 1 )
Javaソースコード
static int parseInt2( String str )が作成したメソッドで、数字の'0'と'1'以外の文字がある場合にエラーとしてint型で持てる最小値-2147483648を戻すようにしています。
StringtoValue2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065
public class StringtoValue2 { // 2進数の文字列を10進数に変換 // エラーの場合、int型の最小値"Integer.MIN_VALUE"を戻す static int parseInt2( String str ) { // 文字数を取得 int len = str.length(); // 文字数が1未満の場合、intの最小値を戻す if ( 1 > len ) return Integer.MIN_VALUE; // 文字列をbyte配列に変換 byte[] code = str.getBytes(); // 結果格納用の変数 int result = 0; // 変換するループ for ( int i = 0; i < len; i++ ) { switch ( code[ i ] ) { case '0': case '1': // 数字の処理の処理 // 桁を1桁増やす result *= 2; // code[i]の値を整数にキャストして足す result += (int)( (byte)code[ i ] - '0' ); break; default: // '0'と'1'以外の文字の場合 return Integer.MIN_VALUE; } } // 最後に結果を戻す return result; } // メイン public static void main( String[] args ) { // 結果を格納する変数 int result; // 変換結果出力 result = parseInt2( "000" ); System.out.println( result ); result = parseInt2( "001" ); System.out.println( result ); result = parseInt2( "010" ); System.out.println( result ); result = parseInt2( "1110" ); System.out.println( result ); result = parseInt2( "10000101" ); System.out.println( result ); } }
実行結果
実行
C:\talavax\javasample>java StringtoValue2
出力結果
0 1 2 14 133
以上です。