㈠ java串口通信中怎樣以十六進制數發送
做串口通訊的時候基本都是通過流讀取、輸出。那麼在java開發中發送數據的時候使用OutputStream,而其write()的參數是位元組數組、int整形。如果使用位元組數組發送的時候,通常可以直接寫成out.write("1234".getBytes())。這樣一來單片機讀到的數據則是31 32 33 34。但是在串口發送的時候先把16進制字元串轉化為byte數組在發送出來,則是發送什麼讀取到的就是什麼。使用:out.write(HexString2Bytes("1234"));那麼讀取到的還是1234。16進制字元串轉化為byte數組的方法為:
 public static byte[] HexString2Bytes(String src) {
       if (null == src || 0 == src.length()) {
           return null;
       }
       byte[] ret = new byte[src.length() / 2];
       byte[] tmp = src.getBytes();
       for (int i = 0; i < (tmp.length / 2); i++) {
           ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
       }
       return ret;
   }
 
在用java做串口開發的時候建議使用開源的Rxtx做。效率、使用方法都要優。使用sun開源的comm個人覺得不是很便利。rxtx網上有開源實例。可以根據自己個需求進行加以修飾利用。
㈡ 什麼數據是用16進製表示的
0x開始的數據表示16進制。
十六進制(hexadecimal)是計算機中數據的一種表示方法。它的規則是「逢十六進一」。
可使用數字元號的數目稱為基數(en:radix)或底數,基數為n,即可稱n進位制,簡稱n進制。最常用的是十進制,通常使用10個阿拉伯數字0-9進行記數。

十六進制數具有下列兩個特點:
英文字母A,B,C,D,E,F分別表示數字10~15。
計數到F後,再增加1個,就進位。十六進制數是計算機常用的一種計數方法,它可以彌補二進制數書寫位數過長的不足,也用於電視機中。
㈢ Java TCP socket通信,如何實現發送十六進制值,並在數據接收窗口中顯示這些數據對應的字元串,非常感謝!
我自己的電腦上有一段源代碼,就是基於TCP聊天小代碼,能進行相互之間的消息接受。我的代碼是直接傳輸字元串的,不是16進制滴。嗯,也貼出來看看吧!
   運行伺服器,c1,c2就可以了,c1與c2可進行通信。
Client.java
import java.net.*;
public class Client{
 static byte num=1;
 private int portNum;
 public Client(int portnum){
  this.portNum=portnum;
  System.out.println("您是第"+num+"位客服端");
  num++;
 }
 public void sentMessage(String me){
  //都是向伺服器發信息埠號1999
  try{
   DatagramSocket ds=new DatagramSocket();
   DatagramPacket dp=new DatagramPacket(me.getBytes(),me.length(),InetAddress.getByName("127.0.0.1"),1999);
   ds.send(dp);
   ds.close();
  }catch(Exception e){
   e.printStackTrace();
  }
}
 public String receiveMessage(){
  String str="";
  try{
   DatagramSocket ds=new DatagramSocket(this.portNum);//表示哦自己的接收埠號是1999
   byte[] buf=new byte[1024];
   DatagramPacket dp=new DatagramPacket(buf,1024);
   ds.receive(dp);
   str=new String(dp.getData(),0,dp.getLength());
   ds.close();
  }catch(Exception e){
   e.printStackTrace();
  }
  return str;
 }
}
c1.java
import java.util.*;
public class c1 implements Runnable{
 Client cl;
 boolean goon=true;
 Scanner sc=new Scanner(System.in);
 public c1(){
  cl=new Client(2000);
  System.out.println("這里是2000客戶端\n你可以發送信息。請輸入要發送的信息。out退出");
  new Thread(this).start();
  while(this.goon==true){
   say();
  }
  if(goon==false){
   System.exit(0);
  }
 }
 public static void main(String[] args){
  new c1();
 }
 public void say(){
  String mess=sc.nextLine();
  System.out.println("是否發送y/n");
  String key=sc.nextLine();
  if(key.equals("y")){
   System.out.println("信息信息發送中……");
   try{
    cl.sentMessage(mess);
   }catch(Exception e){
    e.printStackTrace();
   }
  }
  else if(key.equals("out")){
   goon=false;
  }
 }
 public void run(){
  while(this.goon==true){
   String sst="";
   try{
    sst=cl.receiveMessage();
   }catch(Exception e){
    e.printStackTrace();
   }
   if(sst.length()>0){
    System.out.println(sst);
   }
   try{
    Thread.sleep(100);
   }catch(InterruptedException e){
    e.printStackTrace();
   }
  }
  System.out.println("程序結束!");
 }
}
c2.java
import java.util.*;
public class c2 implements Runnable{
 Client cl;
 boolean goon=true;
 Scanner sc=new Scanner(System.in);
 public c2(){
  cl=new Client(2001);
  System.out.println("這里是2001客戶端\n你可以發送信息。請輸入要發送的信息。out退出");
  new Thread(this).start();
  while(goon==true){
   say();
  }
  if(goon==false){
   System.exit(0);
  }
 }
 public static void main(String[] args){
  new c2();
 }
 public void say(){
  String mess=sc.nextLine();
  System.out.println("是否發送y/n");
  String key=sc.nextLine();
  if(key.equals("y")){
   System.out.println("信息信息發送中……");
   try{
    cl.sentMessage(mess);
   }catch(Exception e){
    e.printStackTrace();
   }
  }
  else if(key.equals("out")){
   this.goon=false;
  }
 }
 public void run(){
  while(this.goon==true){
   String sst="";
   try{
    sst=cl.receiveMessage();
   }catch(Exception e){
    e.printStackTrace();
   }
   if(sst.length()>0){
    System.out.println(sst);
   }
   try{
    Thread.sleep(100);
   }catch(InterruptedException e){
    e.printStackTrace();
   }
  }
  System.out.println("聊天關閉!");
 }
}
Server.java
import java.net.*;
import java.util.*;
public class Server implements Runnable{
 private String message;
 boolean work=true;
 byte tm=10;
 String[] clomessage={"信息:正在斷開網路連接.",".",".\n","信息:設置保存中……","","","完成\n","信息:歡迎下次使用\n","信息:完成\n","Goodbye!"};
 public Server(){
  new Thread(this).start();
  System.out.println("本程序為服務端Server");
  Scanner sc=new Scanner(System.in);
  System.out.println("輸入命令out關閉伺服器");
  String clo=sc.nextLine();
  if(clo.equals("out")){
   System.out.println("正在關閉伺服器……");
   setwork(false);
   System.exit(0);
  }
 }
 public static void main(String[] args){
  new Server();
  
 }
 
 public void setwork(boolean bo)
 {
  this.work=bo;
 }
 public void setMessage(String str){
  this.message=str;
 }
 public String getMessage(){
  return this.message;
 }
 public void sentMessage(){
  String mes=this.getMessage();
  try{
   DatagramSocket ds=new DatagramSocket();
   DatagramPacket dp=new DatagramPacket(mes.getBytes(),mes.length(),InetAddress.getByName("127.0.0.1"),2000);
   DatagramPacket dp2=new DatagramPacket(mes.getBytes(),mes.length(),InetAddress.getByName("127.0.0.1"),2001);
   ds.send(dp);
   ds.send(dp2);
   ds.close();
   System.out.println("信息發送至:127.0.0.1:2000 & 127.0.0.1:2001");
   this.setMessage("");
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 public void receiveMessage() throws Exception{
  try{
   DatagramSocket ds=new DatagramSocket(1999);//表示哦自己的接收埠號是1999
   byte[] buf=new byte[1024];
   DatagramPacket dp=new DatagramPacket(buf,1024);
   ds.receive(dp);
   String str=new String(dp.getData(),0,dp.getLength());
   if(str.length()>0){
    this.setMessage(str);
    System.out.println("信息:Server從"+dp.getAddress().getHostAddress()+"主機(埠號:"+dp.getPort()+")收到信息:"+this.getMessage());
   }
  
   ds.close();
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 public void run(){
  while(tm>0){
      if(work==false){
    tm--;
    System.out.print(clomessage[9-tm]);
      }
      try{
    receiveMessage();//時刻接受信息
      }catch(Exception e){
    e.printStackTrace();
      }
      if(this.getMessage().length()>0){//如果接收到信息則發送信息
      try{
    sentMessage();
      }catch(Exception e){
    e.printStackTrace();
      }
      try{
    Thread.sleep(100);
      }catch(InterruptedException e){
    e.printStackTrace();
      }
   }
  }
 }
}
呵呵,請指教啊!
㈣ can通訊中為什麼都是16進制顯示
can通訊中16進制顯示是為了便於人的閱讀和記憶。十六進制碼在電路中實際上是二進制碼。CAN匯流排上的電平是相對的,D+高於D-一定的電平(不同的CAN收發器件的具體電平差有些差異)。
㈤ PLC通訊中數據幀的書寫是用16進制嗎
這個用幾進制都可以,只要是plc支持的進制。在plc里幾進制都一樣,只是通信的數據一般喜歡用十六進制罷了,因為在分析報文時,對數據進行合並,拆分,十六進制比較方便。望採納。。。。。。㈥ 有關通訊,ASCII,十六進制...還有編程
我的理解是這樣子的:以ASCII進行數據傳輸的話是將數據轉換成ASCII碼(16進制),比如『A』轉換成41,。如果發出的值是『H1000』的話,我們將接收到『4831303030』,應該理解成十六進制的,這些值應該要進行編碼轉換成原來的值。呵呵,以上是我的一些看法,不知道對你是否有幫助。因為我做過串口通信的小實驗,有一點點的理解。
㈦ 16進制通訊和ASCII通訊,哪個方式更快
這個還要看具體項目和實際情況 
一般來說 數據量大的比如乙太網通信用16進制
數據量小的使用ascii 比如低速的串列通信
ASCII最終也是按位存儲的數據傳送 效率上是比不上16進制
但是ascii易於處理 便於調試
在使用規程分析儀等設備的時候 ascii一目瞭然 調試及檢測十分方便
㈧ 通訊為什麼轉成16進制,為什麼常見的UDP通訊要轉成16進制,不出現亂碼嗎
16 進制只是給人看的,因為通信過程經常不是文本方式可以閱讀,多數情況下是二進制的數據,你看不懂的,也記不住,通常在程序中是以位元組的形式表示,但有時候,連一個字元都算不上,而讓一個位元組包括多少狀態位,這時,這個位元組本身沒有意義,有時候這個位元組不能轉換成可列印的字元,而有時候轉換成可列印的字元後也是古怪的符號。只有轉換成 16 進制更容易記憶。
16 進制本身只是把數字給你看的過程中轉換了,真實的網路傳遞多數情況下還是以位元組為單位發送數據的。你就不用擔心亂碼了。
㈨ 為什麼串口發送指令要按照16進制發送
你要知道 電子設備之間的串口數據通信是:單位時間內的電壓高低來進行傳送的(編程的時候說的是二進制) 高電平位1 低電平位016進制FF 最大表示255所以換做二進制位11111111 綜上所述 無論 你傳送的是什麼漢字也好 圖片也罷 音樂也可以 歸根結底 都是用電壓來表示的這里涉及的范圍有點大 我也說不清楚 你去了解下串口的通信 在物理上是怎麼完成的 你就能理解了㈩ C#串口通訊接收數據為16進制如下
寫了一個,不知道可不可以達到你的需求.
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO.Ports;
namespace PortTestAAA
{
    class Program
    {
        static void Main(string[] args)
        {
            PortOperator myTestPort = new PortOperator();
            myTestPort.PortName = "COM1";
            myTestPort.BaudRate = 9600;
            myTestPort.DataChange += new PortOperator.DataChangeEventHandle(myTestPort_DataChange);
            myTestPort.Start();
        }
        static void myTestPort_DataChange(object sender, byte[] data)
        {
            //在這里寫你需要處理東西就行了
                Console.WriteLine(Encoding.UTF8.GetString(data));
        }
    }
    class PortOperator
    {
        public delegate void DataChangeEventHandle(object sender,byte[] data);
        public event DataChangeEventHandle DataChange;
        SerialPort gPort;
        public string PortName { get; set; }
        public int BaudRate { get; set; }
        /// <summary>
        /// Suspend : /ms
        /// </summary>
        public int Suspend { get; set; }
        public PortOperator()
        {
            gPort = new SerialPort();
            Suspend = 200;
        }
        void OnDataChange(byte[] data)
        {
            if (DataChange != null)
                DataChange(this, data);
        }
        public void Start()
        {
            gPort.Close();
            gPort.PortName = PortName;
            gPort.BaudRate = BaudRate;
            gPort.Open();
            Thread thReadData = new Thread(() => { ReadData(); });
            thReadData.IsBackground = true;
            thReadData.Start();
        }
        void ReadData()
        {
            while (true)
            {
                Thread.Sleep(Suspend);
                if (!gPort.IsOpen || gPort.BytesToRead < 1)
                    continue;
                var buffer = new byte[gPort.BytesToRead];
                gPort.Read(buffer, 0, buffer.Length);
                OnDataChange(buffer);
            }
        }
    }
}