我的一同学要我写一个ASCII码转换程序,我才发现我一直对于ASCII,unicode码还不是很
清楚所以网上搜了一下,写了一个简单的java的ASCII码转换程序,其实我想用c语言写会更
方便,以后参考:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.Border;
public class Convert extends JFrame {
public static void main(String[] args) {
new Convert();
}
JTextArea label;
JButton button1;
JButton button2;
JButton button3;
JTextField textField;
public Convert() {
super();
this.setTitle("convert");
this.setSize(300, 250);
label = new JTextArea(10, 25);
label.setLineWrap(true);
button1 = new JButton("文字转ASCII码");
button2 = new JButton("清除");
button3 = new JButton("ASCII码转文字");
textField = new JTextField(21);
this.setLayout(new FlowLayout());
this.add(textField);
this.add(button1);
this.add(button3);
this.add(button2);
this.add(label);
// pack();
this.setVisible(true);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (textField.getText().equals("")) {
JOptionPane.showMessageDialog(null, "输入不能为空");
} else {
label.setText(convert(textField.getText()));
// convertUnicode(textField.getText());
}
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
textField.setText("");
label.setText("");
}
});
button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (textField.getText().equals("")) {
JOptionPane.showMessageDialog(null, "输入不能为空");
} else {
label.setText(DeConvert(textField.getText()));
// DeConvertUnicode(textField.getText());
}
}
});
}
/*
* //方法2: private static String hexString = "0123456789ABCDEF";//设置编码格式
* public String convert(String s){ byte[] bytes = s.getBytes();
* StringBuilder sb = new StringBuilder(bytes.length * 2); //
* 将字节数组中每个字节拆解成2位16进制整数 for (int i = 0; i < bytes.length; i++) {
* sb.append(hexString.charAt((bytes[i] & 0xf0) >> 4));
* sb.append(hexString.charAt((bytes[i] & 0x0f) >> 0)); } return
* sb.toString(); } public String DeConvert(String s){ ByteArrayOutputStream
* baos = new ByteArrayOutputStream(s.length() / 2); // 将每2位16进制整数组装成一个字节* for (int i = 0; i < s.length(); i += 2)
* baos.write((hexString.indexOf(s.charAt(i)) << 4 |
* hexString.indexOf(s.charAt(i + 1)))); return new
* String(baos.toByteArray()); }
*/
public String convert(String s) {
String ret = "";
byte[] b = null;
b = s.getBytes();
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}
public String DeConvert(String s) {
byte[] b = new byte[s.length() / 2];
int j = 0;
for (int i = 0; i < s.length(); i += 2) {
b[j] = (byte) (Integer.parseInt(s.substring(i, i + 2), 16) & 0xff);// 这里的十六表示十六进制
j++;
}
return new String(b);
}
/*
* 在32位的电脑中数字都是以32格式存放的,如果是一个byte(8位)类型的数字,他的高24位里面
* 是随机数字,低8位才是实际的数据。java.lang.Integer.toHexString() 方法的参数是int(32位)类型,
* 如果输入一个byte(8位)类型的数字,这个方法会把这个数字的高24为也看作有效位,这就必然导致错误, 使用
* 0XFF操作,可以把高24位置0以避免这样错误的发生。<<表示左移n位,空位补零,相当于乘2,>>表示右移n位,
* 空位用原最高位的值补足,相当于除2 ,integer.toHexString()方法为将int数据转为十六进制,touppercase()方法
* 为将字符串中的字母全部改为大写
*/
public void convertUnicode(String s) {
char[] chars = s.toCharArray(); // 把字符中转换为字符数组
System.out.println("\n\n汉字 ASCII\n----------------------");
for (int i = 0; i < chars.length; i++)
// System.out.println(" "+chars[i]+" "+(int)chars[i]);//这里转换成的是十进制unicode内码
System.out.println(chars[i] + " "
+ Integer.toHexString((int) (chars[i])).toUpperCase());// 这里转换成的是十六进制unicode内码
}
public void DeConvertUnicode(String s) {
String[] chars = s.split(" ");
System.out.println("ASCII 汉字 \n----------------------");
for (int i = 0; i < chars.length; i++)
System.out.println(chars[i] + " "
+ (char) Integer.parseInt(chars[i]));
}
}