最近在使用NB-IoT进行STM32开发时经常遇到需要将字符串转为16进制数据的情况,在使用大多数模块以及UDP等通讯协议时,也大多需要将字符串转为16进制后再传输,所以我决定用JAVA GUI制作一个窗体程序可以方便的实现字符串和16进制数据的互相转换。
一、编写两个转换方法
首先是字符串转16进制方法,虽然char[]数组更方便转换,但是由于GUI中JTextField通常都是String类型,还是将方法的参数设为String类型:
/**
* String转16进制
* @param ascii
* @return
*/
static String Ascii2Hex(String ascii) {
char[] chars = ascii.toCharArray();
StringBuffer hex = new StringBuffer();
for (int i = 0;i < chars.length;i++) {
hex.append(Integer.toHexString((int)chars[i]));
}
return hex.toString().toUpperCase();
}
然后是16进制转字符串的方法,同样其参数为String类型:
/**
* 16进制转String
* @param hex
* @return
*/
static String Hex2Ascii(String hex) {
String temp = "";
for (int i = 0; i < hex.length() / 2; i++) {
temp = temp + (char) Integer.valueOf(hex.substring(i * 2, i * 2 + 2), 16).byteValue();
}
return temp;
}
二、窗体类
实现了两个转换的方法后,就可以新建一个类继承自JFrame,在窗口类中布局,在窗口类中,我使用简单的线性布局来实现。将第一个JTextField的文字作为转换方法的参数,得到返回值输出到第二个JTextField。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @Author :王皓月
* @Date :2018/6/16 下午10:40
* @Description :窗体类
*/
public class ToolGUI extends JFrame {
JTextField textField1;
JButton button1;
JButton button2;
JTextField textField2;
public ToolGUI() {
setVisible(true);
setTitle("16进制与字符串转换");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(400,400,400,130);
setLayout(new FlowLayout());
Container container = getContentPane();
container.setBackground(Color.WHITE);
textField1 = new JTextField(30);
container.add(textField1);
button1 = new JButton("ASCII转HEX");
button2 = new JButton("HEX转ASCII");
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String INPUT = textField1.getText().toString();
String OUTPUT = Hex_Ascii.Ascii2Hex(INPUT);
textField2.setText(OUTPUT);
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String INPUT = textField1.getText().toString();
String OUTPUT = Hex_Ascii.Hex2Ascii(INPUT);
textField2.setText(OUTPUT);
}
});
container.add(button1);
container.add(button2);
textField2 = new JTextField(30);
container.add(textField2);
container.validate();
setResizable(false);
}
}
三、主函数
最后在主类中新建一个窗体类的对象即可。
public class main {
public static void main(String[] args) {
new ToolGUI();
}
}