Java 如何将字符串转换为十六进制和十六进制转换为字符串?
我用java编写了一个简单的程序,用于向串行端口发送和接收数据。我将串行端口设备与环回测试(Rx到Tx)连接。它很好用。但我不能发送和接收十六进制数据到串口和接收串口。在我的设备中,使用了FT232BL芯片。因此,是否需要任何dll或其他库来向串行端口设备发送和接收十六进制数据。我的代码如下Java 如何将字符串转换为十六进制和十六进制转换为字符串?,java,serial-port,hex,Java,Serial Port,Hex,我用java编写了一个简单的程序,用于向串行端口发送和接收数据。我将串行端口设备与环回测试(Rx到Tx)连接。它很好用。但我不能发送和接收十六进制数据到串口和接收串口。在我的设备中,使用了FT232BL芯片。因此,是否需要任何dll或其他库来向串行端口设备发送和接收十六进制数据。我的代码如下 enter code here package x.rayimagecapture; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; i
enter code here
package x.rayimagecapture;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class TwoWaySerialComm extends JPanel implements ActionListener {
OutputStream out;
private javax.swing.JButton btn;
private javax.swing.JScrollPane jScrollPane1;
public static javax.swing.JLabel jLabel1;
public static javax.swing.JTextField textField;
public static boolean flag = false;
public static int count = 50;
// TimerWindow tmr=new TimerWindow();
public static Timer tmr = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
count++;
jLabel1.setText("" + count);
}
});
public TwoWaySerialComm() {
super();
textField = new javax.swing.JTextField();
btn = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jLabel1 = new javax.swing.JLabel();
textField.setText(""); // NOI18N
// tmr.setDelay(0);
btn.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
btn.setText("Send"); // NOI18N
btn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
serialwrite();
}
});
// textArea.setColumns(20);
// textArea.setRows(20);
// textArea.setTabSize(0);
jScrollPane1.setViewportView(jLabel1);
javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(this);
this.setLayout(panelLayout);
panelLayout.setHorizontalGroup(
panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelLayout.createSequentialGroup()
.addComponent(textField, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btn, javax.swing.GroupLayout.DEFAULT_SIZE, 84, Short.MAX_VALUE)
.addContainerGap())
.addComponent(jScrollPane1));
panelLayout.setVerticalGroup(
panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelLayout.createSequentialGroup()
.addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(textField, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btn, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 218, Short.MAX_VALUE)));
}
void connect(String portName) throws Exception {
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if (portIdentifier.isCurrentlyOwned()) {
System.out.println("Error: Port is currently in use");
} else {
CommPort commPort = portIdentifier.open(this.getClass().getName(), 2000);
if (commPort instanceof SerialPort) {
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
InputStream in = serialPort.getInputStream();
out = serialPort.getOutputStream();
(new Thread(new SerialReader(in))).start();
// (new Thread(new SerialWriter(out))).start();
} else {
System.out.println("Error: Only serial ports are handled by this example.");
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
serialwrite();
}
public void serialwrite() {
try {
this.out.write(textField.getText().toString().getBytes());
count = 00;
// tmr.start();
tmr.start();
this.out.flush();
} catch (IOException ex) {
Logger.getLogger(TwoWaySerialComm.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
*
*/
public static class SerialReader implements Runnable {
InputStream in;
public SerialReader(InputStream in) {
this.in = in;
}
public void run() {
byte[] buffer = new byte[1024];
int len = -1;
try {
while ((len = this.in.read(buffer)) != -1) {
// textArea.append(" " + new String(buffer, 0, len));
String str = new String(buffer, 0, len);
System.out.print(str);
if (!str.isEmpty()) {
// tmr.stop();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
*
*/
public static class SerialWriter implements Runnable {
OutputStream out;
public SerialWriter(OutputStream out) {
this.out = out;
}
public void run() {
try {
int c = 0;
while ((c = System.in.read()) != -1) {
// this.out.write(c);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
TwoWaySerialComm tws = new TwoWaySerialComm();
JFrame frame = new JFrame();
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(tws);
try {
tws.connect("COM11");
} catch (Exception ex) {
Logger.getLogger(TwoWaySerialComm.class.getName()).log(Level.SEVERE, null, ex);
}
frame.setVisible(true);
}
}
字符串
到十六进制:
Integer.decode(hexString);
十六进制到字符串
:
Integer.toHexString(integer);
对于从字符串到十六进制的
Integer.decode("0x4d2"); // output is 1234
Integer.toHexString(1234); // output is 4d2
(“应在字符串中添加(前缀)以解码为十六进制)
十六进制到字符串
Integer.decode("0x4d2"); // output is 1234
Integer.toHexString(1234); // output is 4d2
对于大于int限制的ARGB格式,是否有任何解决方案
Integer.decode(0xffff6600)
抛出NumberFormatException无效int:“0xffff6600”
。环绕到-39424是可以的,因为mCanvas.drawColor(-39424)可以工作。它只是一个整数。解码不能处理较大的数字@CarlJohn@gotubedecode将字符串作为参数,而不是int。问题在于数字不是太大。tohextstring(i)
不是类String
中的方法,我想你的意思是Integer