最近在使用NB-IoT進行STM32開發(fā)時經(jīng)常遇到需要將字符串轉(zhuǎn)為16進制數(shù)據(jù)的情況靶橱,在使用大多數(shù)模塊以及UDP等通訊協(xié)議時,也大多需要將字符串轉(zhuǎn)為16進制后再傳輸营袜,所以我決定用JAVA GUI制作一個窗體程序可以方便的實現(xiàn)字符串和16進制數(shù)據(jù)的互相轉(zhuǎn)換撒顿。
一、編寫兩個轉(zhuǎn)換方法
首先是字符串轉(zhuǎn)16進制方法荚板,雖然char[]數(shù)組更方便轉(zhuǎn)換凤壁,但是由于GUI中JTextField通常都是String類型,還是將方法的參數(shù)設為String類型:
/**
* String轉(zhuǎn)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進制轉(zhuǎn)字符串的方法啸驯,同樣其參數(shù)為String類型:
/**
* 16進制轉(zhuǎn)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;
}
二客扎、窗體類
實現(xiàn)了兩個轉(zhuǎn)換的方法后,就可以新建一個類繼承自JFrame罚斗,在窗口類中布局,在窗口類中宅楞,我使用簡單的線性布局來實現(xiàn)针姿。將第一個JTextField的文字作為轉(zhuǎn)換方法的參數(shù)袱吆,得到返回值輸出到第二個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進制與字符串轉(zhuǎn)換");
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轉(zhuǎn)HEX");
button2 = new JButton("HEX轉(zhuǎn)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);
}
}
三距淫、主函數(shù)
最后在主類中新建一個窗體類的對象即可绞绒。
public class main {
public static void main(String[] args) {
new ToolGUI();
}
}