/********************************/ /* */ /* 16進数文字列と数値の変換 */ /* */ /* 1998/10/16 宍戸 輝光 */ /* */ /********************************/ import java.awt.*; public class hexint extends java.applet.Applet { Label hexL,intL; TextField hexF,intF; Button toHexB,toIntB; Panel hexP,intP,btnP; public void start(){ hexP=new Panel(); hexL=new Label("Hex"); hexF=new TextField(8); hexP.add(hexL); hexP.add(hexF); hexF.setText("00000100"); btnP=new Panel(); toHexB=new Button("IntToHex"); toIntB=new Button("HexToInt"); btnP.add(toHexB); btnP.add(toIntB); intP=new Panel(); intL=new Label("Int"); intF=new TextField(8); intP.add(intL); intP.add(intF); intF.setText("256"); setLayout(new BorderLayout(2,8)); add("North",hexP); add("Center",btnP); add("South",intP); } private String IntToHex(int n) { /* 数値を16進文字列に */ int i; String res,rest; res=""; for (i=0;i<8;i++) { /* 32ビット整数を16進一桁づつ変換 */ switch (n & 0xf) { /* 16進一桁づつ取り出す */ case 10: res+="a"; break; case 11: res+="b"; break; case 12: res+="c"; break; case 13: res+="d"; break; case 14: res+="e"; break; case 15: res+="f"; break; default: res+=String.valueOf(n & 0xf); } n=n>>4; /* 4ビット(16進一桁分)右シフト */ } rest=""; for (i=7;i>-1;i--) /* 文字列を左右反転 */ rest+=res.substring(i,i+1); return rest; } private int HexToInt(String str) { /* 16進文字列を数値に */ char s[]; int a,i,r; a=1; /* 加算対象となる桁の重み */ r=0; /* 結果 */ s=str.toCharArray(); /* 文字列を配列に */ for (i=str.length()-1;i>-1;i--) { /* 一字づつ取り出す */ switch (s[i]) { /* 取り出した文字の数値を加算 */ case '0': r+=a*0; break; case '1': r+=a*1; break; case '2': r+=a*2; break; case '3': r+=a*3; break; case '4': r+=a*4; break; case '5': r+=a*5; break; case '6': r+=a*6; break; case '7': r+=a*7; break; case '8': r+=a*8; break; case '9': r+=a*9; break; case 'a': r+=a*10; break; case 'b': r+=a*11; break; case 'c': r+=a*12; break; case 'd': r+=a*13; break; case 'e': r+=a*14; break; case 'f': r+=a*15; break; } a*=16; /* 加算対象の桁を一つ上げる */ } return r; /* 結果の数値を返す */ } public boolean action(Event evt,Object What) { int n; String s; if (evt.target==toHexB) { n=Integer.parseInt(intF.getText()); hexF.setText(IntToHex(n)); return true; } if (evt.target==toIntB) { n=HexToInt(hexF.getText()); intF.setText(String.valueOf(n)); return true; } return false; } }