java大神来 16进制

SuperNoobTao 2015-10-12 06:09:51
我想
输入的是
AC 1D 67 9B CE BF 11 38 D1 C2 B5

然后 显示的是他的16进制的值 惮g浳?8崖 (不要在意这些乱码)

还有就是比如AC 1D 中间空格多少个是无所谓的不影响的。
我以为是要用字节数组byte[]做的,可是做不出来。

怎么做!!!急求
这对大神来说很简单吧!!有需要的话加qq也行,本人新手,琢磨好久了
...全文
174 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuangqingch 2015-10-14
  • 打赏
  • 举报
回复
引用 7 楼 qq_20079725 的回复:
求朋友们花个一小时帮帮忙,会重谢的
技术交流区就不用说什么重谢了。下面是服务端和客户端的消息简单收发处理。你可以参考下(先启动Server,再启动Client) Server端:

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author zhuangqing
 */
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(8888);
        System.out.println("server start");
        Socket socket = server.accept();
        System.out.println("accept connect:" + socket.getRemoteSocketAddress());
        InputStream in = socket.getInputStream();
        int len = 0;
        while ((len = in.read()) > 0) {
            byte[] data = new byte[len];
            int readSize = 0;
            while (readSize < len) {
                readSize = in.read(data, readSize, data.length);
                len -= readSize;
            }
            String msg = new String(data);
            System.out.println("read data: " + msg);
        }
    }
}
Client端:

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * @author zhuangqing
 */
public class Client {

    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 8888);
        OutputStream out = socket.getOutputStream();
        Scanner scan = new Scanner(System.in);
        System.out.print("please input send data:");
        while (scan.hasNextLine()) {
            String msg = scan.nextLine();
            byte[] data = msg.getBytes();
            out.write(data.length);
            out.write(data);
            System.out.println("send data: " + msg);
            System.out.print("please input send data:");
        }

    }
}
SuperNoobTao 2015-10-13
  • 打赏
  • 举报
回复
求朋友们花个一小时帮帮忙,会重谢的
SuperNoobTao 2015-10-12
  • 打赏
  • 举报
回复
我看了会儿书,看到了那个字节流传输数据,我在想是不是可以直接把AC 1D 67 9B CE BF 11 38 D1 C2 B5当做一个byte[]数组来处理呢?就是不要什么string了!总觉得有字符串在不严谨。因为我本意就是想把这个当byte[]传的,请问这样可行吗?如果可行那要怎么做呢。如果需要soket通信的源码的我可以提供的。必有重谢!。。
zhuangqingch 2015-10-12
  • 打赏
  • 举报
回复
建议用第一种吧,后面那种通信量会多一些
zhuangqingch 2015-10-12
  • 打赏
  • 举报
回复
嗯,明白你意思了。有2种处理方式 第1种,客户端处理值解析,再传递给服务端 你把我之前发的代码中的int强转位char修改为强转byte就可以了,服务器读取时采用无符号位方式读取字节值。 第2种是直接传给服务端解析处理。 将你那整个串xx d1 xx xx xx直接转成byte数组(string.getBytes()),然后传给服务端。记得传这个数组前,先传个数组长度值(4个字节就够了),然后服务端先读4个字节转为int,既解析出数组字节长度n,然后再读n个字节(客户端的串byte数组),然后通过new String(bytr[] data, String encode),就能得到前前端发过来的串来,后面想得到十六进制值,就是之前我发你的代码。 想减少的通信量的话可以在前端做下空白字符的删除处理。
SuperNoobTao 2015-10-12
  • 打赏
  • 举报
回复
也就是说,你用的是srting 但是我想要用的byte【】数组,请问这个怎么搞。。
SuperNoobTao 2015-10-12
  • 打赏
  • 举报
回复
额,其实不是,我本来的意思是soket通信里,客户机传这么一个AC 1D 67 9B CE BF 11 38 D1 C2 B5 序列,然后服务器读出来他所对应的值,我的意思是字节流的传递,就是把AC 1D 67 9B CE BF 11 38 D1 C2 B5 放在字节数组bytes[],像这样就是bytes[0]就是AC,bytes[1]就是1D,然后C2 B5 这之间的空格是完全不影响的。。你听得懂吗。我是新手,可能我讲的不太那个让人理解。。
zhuangqingch 2015-10-12
  • 打赏
  • 举报
回复
不知道楼主是不是想实现各个十六进制值转为对应字符。如果是的话,可以参考以下代码,不是的话,楼主你得详细说下你的需求。具体是转换规则是什么。

import java.util.Scanner;

/**
* @author zhuangqing
*/
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] hexArr = str.trim().split("\\s+");
for (String hex : hexArr) {
char c = (char) Integer.parseInt(hex, 16);
System.out.print(c + " ");
}

}
}

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧