16進数の数値を変数に代入する方法とは?

このQ&Aのポイント
  • 16進数の数値を変数に代入する方法を教えてください。
  • 文字コードを復号して文字列を出力するためのコードでエラーが発生しています。解決方法を教えてください。
  • 入力された16進数の数値を2桁ずつに分割し、文字コードとして変換しています。しかし、エラーが発生しています。
回答を見る
  • ベストアンサー

16進数の数値を変数に代入したい

いつもお世話になっております。 文字コードを復号して文字列を出力したいのですが 以下のdecode_charクラスのコードの13行目でエラーになります。 解決方法ご存知でしたら、ご回答いただけないでしょうか よろしくお願いします。 例)文字列"82a0"を入力値する。 0x82を16進数の数値として変換したいが NumberFormatExceptionが発生。 ------------------------------------------------ class decode_char { public static void main(String arg[]) { String str_code = arg[0]; //入力値 String divice_code = ""; //入力値の2桁ずつの文字コード byte code_ary[] = null; //divice_codeの16進数整数 String maked_char = ""; //Shift_JISで復号した文字列 for(int i = 0 ; i < str_code.length() / 2 ; i++) { divice_code = str_code.substring(i * 2,i * 2 + 2); code_ary[i] = Integer.parseInt("0x" + divice_code); } try { maked_char = new String(code_ary,"Shift_JIS"); System.out.println(maked_char); } catch(Exception e) { System.err.println("error!"); } } }

  • Java
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

/* 間違えた */ class Q3172272 { public static void main(String arg[]) { String str_code = arg[0]; //入力値 String divice_code = ""; //入力値の2桁ずつの文字コード byte[] code_ary = new byte[str_code.length() / 2]; //divice_codeの16進数整数 String maked_char = ""; //Shift_JISで復号した文字列 for(int i = 0 ; i < str_code.length() / 2 ; i++){ Integer CodePoint; /* 配列にしてはいけなかった。以下添字全部削除 */ divice_code = str_code.substring(i * 2,i * 2 + 2); CodePoint = Integer.parseInt(divice_code,16); /*添字削除 */ System.out.println(CodePoint); /*添字削除 */ code_ary[i] = CodePoint.byteValue(); /*添字削除 */ } try { maked_char = new String(code_ary,"Shift_JIS"); System.out.println(maked_char); } catch(Exception e) { System.err.println("error!"); } } }

19746999
質問者

補足

himajin100000様 ご回答ありがとうございます。 ソースをそのままコピーして コンパイルすると Q3172272.java:14: 互換性のない型 検出値 : int 期待値 : java.lang.Integer CodePoint = Integer.parseInt(divice_code,16); となるので、 以下のようにしたらうまくいきました。 ありがとうございました。 ------------------------------- class Q3172272 { public static void main(String arg[]) { String str_code = arg[0]; //入力値 String divice_code = ""; //入力値の2桁ずつの文字コード byte[] code_ary = new byte[str_code.length() / 2]; //divice_codeの16進数整数 String maked_char = ""; //Shift_JISで復号した文字列 for(int i = 0 ; i < str_code.length() / 2 ; i++){ int CodePoint; divice_code = str_code.substring(i * 2,i * 2 + 2); CodePoint = Integer.parseInt(divice_code,16);//右辺と左辺のデータ型を合わせる System.out.println(CodePoint); Integer CodePointObject = new Integer(CodePoint);//CodePointの値をもつIntegerオブジェクト生成 code_ary[i] = CodePointObject.byteValue(); } try { maked_char = new String(code_ary,"Shift_JIS"); System.out.println(maked_char); } catch(Exception e) { System.err.println("error!"); } } }

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

回答は先を越されてしまったので書きませんが(同じなので)、 ついでに質問です。 catch(Exception e) { System.err.println("error!"); } error! だというメッセージだけ出されてもうれしくもなんともないので (今回は一箇所だけですが複数あった場合にどれだかわからなくなる)、 せめて e.toString() くらいは出したほうがいいと思うのですが、 なぜこうしているのでしょうか?

回答No.1

class Q3172272 { public static void main(String arg[]) { String str_code = arg[0]; //入力値 String divice_code = ""; //入力値の2桁ずつの文字コード byte[] code_ary = new byte[str_code.length() / 2]; //divice_codeの16進数整数 String maked_char = ""; //Shift_JISで復号した文字列 for(int i = 0 ; i < str_code.length() / 2 ; i++){ Integer[] CodePoint = new Integer[2]; divice_code = str_code.substring(i * 2,i * 2 + 2); CodePoint[i] = Integer.parseInt(divice_code,16); System.out.println(CodePoint[i] ); code_ary[i] = CodePoint[i].byteValue(); } try { maked_char = new String(code_ary,"Shift_JIS"); System.out.println(maked_char); } catch(Exception e) { System.err.println("error!"); } } } ===== http://homepage3.nifty.com/jgrammar/ja/tools/codeval0.htm を利用してShift_JISで「あ」が82A0であることを調べた後 javac Q3172272.java java Q3172272 82A0 130 160 あ

関連するQ&A

  • javaについて質問です。

    javaについて質問です。 シーザー暗号の暗号化と復号化のプログラムをつくりたいのですが... import java.io.*; class Prob6_2 { public static void main(String [] args)throws IOException { int key; //キー番号 String orgStr; //ターゲット文字列 String encStr; //暗号化文字列 String decStr; // 復号化文字列 String temp; BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); System.out.print("ターゲット文字列:"); orgStr=br.readLine(); System.out.print("キー番号:"); temp=br.readLine(); key=Integer.parseInt(temp); Cipher cip=new Cipher (); encStr=cip.encrypt(orgStr,key); decStr=cip.decrypt(encStr,key); System.out.println("[Original Code]"+orgStr); System.out.println("[Encrypted Code]"+encStr); System.out.println("[Decrypted Code]"+decStr); } } class Cipher { String encrypt(String str,int key) { for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c+key); /*この後どのように一つずつの文字をつなげて文字列にしたら良いか分かりません。StringBuffer クラスのインスタンス をつかうといいというヒントは問題集に書いてあるのですが....教えて下さい*/ } } String decrypt(String str,int key) { for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); /*この後どのように一つずつの文字をつなげて文字列にしたら良いか分かりません。StringBuffer クラスのインスタンス をつかうといいというヒントは問題集に書いてあるのですが....教えて下さい*/ } } } class Cipherのところにコメントでも書いてあるのですが、一つずつの文字をつなげて文字列にしたら良いか分かりません。どのように実現したら良いのでしょうか?><教えてください>< 違っているところがあればそこも教えて頂けるとたすかります。 お願いします>< できたらStringBufferをつかったやり方を教えてください><」

    • ベストアンサー
    • Java
  • javaについて質問です。お願いします><

    javaについて質問です。お願いします>< シーザー暗号を実現するプログラムをじゃいたのですが、import java.io.*; class Prob6_3 { public static void main(String [] args)throws IOException { int key; //キー番号 String orgStr; //ターゲット文字列 String encStr; //暗号化文字列 String decStr; // 復号化文字列 String temp; BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); System.out.print("ターゲット文字列:"); orgStr=br.readLine(); System.out.print("キー番号:"); temp=br.readLine(); key=Integer.parseInt(temp); Cipher cip=new Cipher (); encStr=cip.encrypt(orgStr,key); decStr=cip.decrypt(encStr,key); System.out.println("[Original Code]"+orgStr); System.out.println("[Encrypted Code]"+encStr); System.out.println("[Decrypted Code]"+decStr); } } class Cipher { String encrypt(String str,int key) { String ret="";             //ココです1 for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c+key); ret+=c; } return ret; } String decrypt(String str,int key) { String ret="";              //ここです2 for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); ret+=c; } return ret; } }   とこんな感じになり実行もできるのですが、class CipherのString encrypt(String str,int key)やString decrypt(String str,int key)のところで一つずつ文字をつなげて文字列にするにはStringBufferクラスのインスタンスを利用すると簡単だとききました。だけど記述方法がよくわからなく使用した場合のreturn文の書き方もイマイチわかりません><なのでできるだけ詳しく教えて頂けないでしょうか??お願いします。//ココですと書いてあるところです。お願いします><

    • ベストアンサー
    • Java
  • 【Java】複数の引数の数値と文字列の判定

    Javaについてです。 コマンドライン引数を複数渡し、渡ってきた値が数字のみの場合は、数値*数値の文字数を出力し 数字のみでない場合は文字列を逆から1文字ずつ出力する。 数値の判定はtry/catchで行い、catchメソッドには「stringFlg = true;」のみにする。 というプログラムを作りたいのですが、 引数が1つの時は上手くいくのですが、11 2あ あ3 44を渡した場合、 22 あ 2 3 あ 88 と出るはずが、 22 1 1 あ 2 3 あ 4 4 と出てしまいます…。 どうしたら全ての引数を正しく表示出来るのでしょうか?教えて下さい。 現時点のソースコードです。 public class Test { public static void main(String[] args) { boolean stringFlg = false; try { if(StringUtils.isNumeric(args[0])){ for(String arg : args) { int num = Integer.parseInt(arg); System.out.println(num * arg.length()); } } else{ stringFlg = true; } } catch (NumberFormatException e) { stringFlg = true; } if(stringFlg){ for(String val : args) { String[] str = val.split(""); for(int i = str.length-1; i >= 0; i--){ System.out.println(str[i]); } } } } }

    • ベストアンサー
    • Java
  • avaというか文字列について少し質問です><

    avaというか文字列について少し質問です>< お願いします。 シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・ String decrypt(String str,int key) { StringBuffer sb = new StringBuffer(); // もしくはStringBuilder for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); sb.append( c ); } こんな感じなのですがアルファベットの小文字26文字のみとしたいので暗号化や復号化の際に越えてしまう場合はアルファベット内でループさせたいのですがいまいちやり方が浮かびません><越えてしまう場合はzからひいたものを表現させれば良いかと思いやってみたのですが全然違う文字が出てきてしまいました。何かいい方法を教えてください。お願いします><

    • ベストアンサー
    • Java
  • javaというか文字列について少し質問です><

    javaというか文字列について少し質問です>< javaというか文字列について少し質問です>< お願いします。 シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・ String decrypt(String str,int key) { StringBuffer sb = new StringBuffer(); // もしくはStringBuilder for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); sb.append( c ); } こんな感じなのですがアルファベットの小文字26文字のみとしたいので暗号化や復号化の際に越えてしまう場合はアルファベット内でループさせたいのですがいまいちやり方が浮かびません><越えてしまう場合はzからひいたものを表現させれば良いかと思いやってみたのですが全然違う文字が出てきてしまいました。何かいい方法を教えてください。お願いします><

    • ベストアンサー
    • Java
  • char型からのバイト数取得

    文字列から1文字ずつバイト数を取得(判定)したいのですが、 char型の文字のバイト数を取得するスマートな方法はありますか? 今考えているのは以下のようなコードです。 String str ="あA" for(int i=0; i < str.length(); i++) { char ch = str.charAt(i); StringBuffer SB = new StringBuffer(); SB.append(c); if(SB.toString().getBytes.length == 1) { //1バイトの処理 } else { //2バイトの処理 } }

    • ベストアンサー
    • Java
  • charで宣言した変数をstringへの代入で

    wchar_t cOrg[128]と宣言している変数にstringで宣言しているstrを cOrg[i] = str[i]; このように代入することはできたのですが、 char cAns[ 128 ]; このように宣言した変数の値をstrの41番目と42番目に 次のように入れようとするとエラーが出ます。 str[41]=cAns[1]; str[42]=cAns[2]; (エラー内容) \Form1.h(428): error C2664: 'System::String::String(wchar_t,int)' : 1 番目の引数を 'wchar_t [128]' から 'wchar_t' に変換できません。(新しい機能 ; ヘルプを参照) このような代入はできないのでしょうか? プログラムの詳細は下のようなものです。 wchar_t cOrg[128],*p; String^ str; String^ str2; int i; int iVal1,iVal2,iTotal = 0,iHosu; char cAns[ 128 ]; str = this->textBox1->Text; for(i=0;i<41;i++) { cOrg[i] = str[i]; } -------(中略)------------------------------------------ iHosu = ~iTotal; // 1の補数 iHosu++; // +1 iHosu = iHosu & 0x00FF; sprintf( cAns, "%s%02X%c", cOrg, iHosu, 0x22 ); str[41]=cAns[1]; str[42]=cAns[2];

  • 型変換方法について

    困っています。。 下記コードは文字コードのチェックをしているのですが、チェックする文字コードを直接指定するのではなく、 String code = "0x2460" のように持たせておきたいのですが、この文字列を使ってチェックするにはどうしたらよいでしょうか? char型に変換しないといけないと思うのですが変換方法が分かりません。 API等いろいろ調べてみたのですが分かりませんでした。 どうか宜しくお願いします。 コード---------------------------------------- public class CodeCheck {  public static void main(String[] args) {   String str = "a"; // チェック対象文字   char ch = str.charAt(0);   if(ch == 0x2460) {    // エラー処理   } else {    // 正常処理   }  } } ---------------------------------------------

    • ベストアンサー
    • Java
  • エラーで式の開始が不正ですと出ます。

    質問内容 課題 ・ファイル student.txt に学生データ(学籍番号、氏名、所属学部)が入っている。 ・半角文字で学籍番号を入れて、検索ボタンを押すと、氏名と学部が表示される。 ・存在しない学籍番号を入れて、検索ボタンを押すと、「該当なし」が表示される。 ・ファイル student.txt の内容。  学籍番号 氏名 学部の間は半角スペースで区切る。 0521201 金城花子 文学部 0533101 守山春子 生活環境学部 0561101 大森夏子 人間科学部 0552130 名城秋子 現代文化学部 0571201 鶴舞冬子 薬学部 プログラムソース↓ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; class kadai2Frame extends JFrame { private JTextField tf1,tf2,tf3; public kadai2Frame() { setSize(200,100); addWindowListener(new WindowAdapter() { // ×クリック時の終了処理 public void windowClosing(WindowEvent e) { System.exit(0); } }); Container c=getContentPane(); c.setLayout(new GridLayout(4,2)); // グリッドレイアウト4 行2 列を指定 c.add(new JLabel("学籍番号")); // 最初のラベルを作成して[名前]と表示 c.add(tf1=new JTextField("",8)); c.add(new JLabel("氏名")); // 最初のラベルを作成して[名前]と表示 c.add(tf2=new JTextField("",8)); c.add(new JLabel("学部")); // 次のラベルを作成して[年齢]と表示 c.add(tf3=new JTextField("",8)); JButton bt; c.add(bt=new JButton("検索")); // ボタンbt を作成して[検索]と表示 bt.addActionListener(new ActionListener() { // ボタンbt のリスナーを登録 public void actionPerformed(ActionEvent e) { // ボタンが押された時 string s6 = tf1.getText(); if(s1.equals(s6)){tf2.setText(str1Ary[1]); string s6 = tf1.getText(); if(s2.equals(s6)){tf2.setText(str2Ary[1]); string s6 = tf1.getText(); if(s3.equals(s6)){tf2.setText(str3Ary[1]); string s6 = tf1.getText(); if(s4.equals(s6)){tf2.setText(str4Ary[1]); string s6 = tf1.getText(); if(s5.equals(s6)){tf2.setText(str5Ary[1]); } public static void main(String[] args) { JFrame w=new kadai2Frame(); w.setVisible(true); try{ BufferedReader br = new BufferedReader(new FileReader("student.txt")); } catch (FileNotFoundException e) { String str1 = br.readLine(); String str2 = br.readLine(); String str3 = br.readLine(); String str4 = br.readLine(); String str5 = br.readLine(); String[] str1Ary = str1.split(" "); for (int i=0; i<str1Ary.length; i++) { System.out.println(str1Ary[i]); } String[] str2Ary = str2.split(" "); for (int i=0; i<str2Ary.length; i++) { System.out.println(str2Ary[i]); } String[] str3Ary = str3.split(" "); for (int i=0; i<str3Ary.length; i++) { System.out.println(str3Ary[i]); } String[] str4Ary = str4.split(" "); for (int i=0; i<str4Ary.length; i++) { System.out.println(str4Ary[i]); } String[] str5Ary = str5.split(" "); for (int i=0; i<str5Ary.length; i++) { System.out.println(str5Ary[i]); } String s1 = "str1Ary[0]"; String s6 = "tf1"; String s2 = "str2Ary[0]"; String s3 = "str3Ary[0]"; String s4 = "str4Ary[0]"; String s5 = "str5Ary[0]"; } } }); } } 以上です。誰か教えてください!!(ToT)

    • ベストアンサー
    • Java
  • String型とchar型の変換エラーです

    今晩は!またまたこの掲示板にきました。よろしくお願いします。 文字列かブランクを取り出すコードを書きましたが、 -------- char ch_check = str.charAt(i+1) ; if(ch_check ==" ") { --------- のところでString型とchar型の混合は受け入れられませんのようなエラーが出ました。 if(ch_check ==" "をboolean型でうけるのも拒否されました。 どこをどのようにしてやればよいでしょうか。 JAVA初心者です、特に文字列の取り扱いは評判通りわかり難くくないています。 よろしくお願いします。 ---------- public class Mojiretu_Blank { public static void main(String[] args) { String str = "This is a pen."; int i = 1 ; int blank_count = 0 ; while( i < (str.length()+1) ) { char ch_check = str.charAt(i+1) ; if(ch_check ==" ") { blank_count ++ ; System.out.println(ch_check); } else{} System.out.print("ブランクの数は" + blank_count + "個です。"); } } }

    • ベストアンサー
    • Java

専門家に質問してみよう