java使用16进制截取字符串的简单介绍

请教JAVA怎么将十六进制转换为字符串,多谢

private static String hexString = “0123456789ABCDEF”;

public static void main(String[] args) {

    System.out.println(encode(“中文”));

    System.out.println(decode(encode(“中文”)));

}

/*

 * 将字符串编码成16进制数字,适用于所有字符(包括中文)

 */

public static String encode(String str) {

    // 根据默认编码获取字节数组

    byte[] bytes = str.getBytes();

    StringBuilder sb = new StringBuilder(bytes.length * 2);

    // 将字节数组中每个字节拆解成2位16进制整数

    for (int i = 0; i  bytes.length; i++) {

sb.append(hexString.charAt((bytes[i]  0xf0)  4));

sb.append(hexString.charAt((bytes[i]  0x0f)  0));

}

    return sb.toString();

}

/*

 * 将16进制数字解码成字符串,适用于所有字符(包括中文)

 */

public static String decode(String bytes) {

    ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length() / 2);

    // 将每2位16进制整数组装成一个字节

    for (int i = 0; i  bytes.length(); i += 2)

baos.write((hexString.indexOf(bytes.charAt(i))  4 | hexString

.indexOf(bytes.charAt(i + 1))));

    return new String(baos.toByteArray());

}

亲测可行,支持中文!!!

JAVA 怎么将16进制的数值转换成字符串?

F5 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 A9

给你个方向,代码自己写就可以了

每一个两位代表一个字节映射为java中的byte

整个就映射byte[]

例如

byte[] bytes=new byte[长度]

bytes[0]=0xF5;

bytes[1]=0x00;

bytes[2]=0x02;

……..以此类推

因为16进制数据实际上就是二进制数据,可以代表任何东西

所以这样的数据代表的源数据不一定是字符串,同时在不知道编码方式的情况下

即使最后通过String s=new String(bytes)转换为字符串,也可能出现的是乱码

除非你清楚这个16进制数据是字符串按照已知编码格式转换而来

否则转换出来的字符串也是没有用处的

java使用16进制截取字符串的简单介绍

如何将16进制数字转换成字符串 java

使用这个方法可以传进去的16进制的数字组成的字符串转化为utf-8格式的字符串

public

static

String

toStringHex1(String

s)

{

byte[]

baKeyword

=

new

byte[s.length()

/

2];

for

(int

i

=

0;

i

baKeyword.length;

i++)

{

try

{

baKeyword[i]

=

(byte)

(0xff

Integer.parseInt(s.substring(

i

*

2,

i

*

2

+

2),

16));

}

catch

(Exception

e)

{

e.printStackTrace();

}

}

try

{

s

=

new

String(baKeyword,

“utf-8”);//

UTF-16le:Not

}

catch

(Exception

e1)

{

e1.printStackTrace();

}

return

s;

}

java字符串组合成16进制,比如我从字符串截取001A,把它作为一个十六进制转换为十进制怎么做?

字符串作为函数change的参数inputStr

byte[] change(String inputStr) {

byte[] result = new byte[inputStr.length() / 2];

for (int i = 0; i inputStr.length() / 2; ++i)

result[i] = (byte)(Integer.parseInt(inputStr.substring(i * 2, i * 2 +2), 16) 0xff);

return result;

}

java中16进制转字符串的问题

你代码有问题,看我的。、

package com.weixin.util;

import java.io.ByteArrayOutputStream;

public class ShiLiuJinZhi {

/** 

* @date:2015年5月14日 上午10:36:02

* @Description:转化字符串为十六进制编码

* @param s

* @return 

*/ 

public static String toHexString(String s) {

   String str = “”;

   for (int i = 0; i  s.length(); i++) {

    int ch = (int) s.charAt(i);

    String s4 = Integer.toHexString(ch);

    str = str + s4;

   }

   return str;

}

/** 

* @date:2015年5月14日 上午10:35:53

* @Description:转化十六进制编码为字符串

* @param s

* @return 

*/ 

public static String toStringHex1(String s) {

   byte[] baKeyword = new byte[s.length() / 2];

   for (int i = 0; i  baKeyword.length; i++) {

    try {

     baKeyword[i] = (byte) (0xff  Integer.parseInt(s.substring(

       i * 2, i * 2 + 2), 16));

    } catch (Exception e) {

     e.printStackTrace();

    }

   }

   try {

    s = new String(baKeyword, “utf-8”);// UTF-16le:Not

   } catch (Exception e1) {

    e1.printStackTrace();

   }

   return s;

}

// 转化十六进制编码为字符串

public static String toStringHex2(String s) {

   byte[] baKeyword = new byte[s.length() / 2];

   for (int i = 0; i  baKeyword.length; i++) {

    try {

     baKeyword[i] = (byte) (0xff  Integer.parseInt(s.substring(

       i * 2, i * 2 + 2), 16));

    } catch (Exception e) {

     e.printStackTrace();

    }

   }

   try {

    s = new String(baKeyword, “utf-8”);// UTF-16le:Not

   } catch (Exception e1) {

    e1.printStackTrace();

   }

   return s;

}

public static void main(String[] args) {

   System.out.println(encode(“aaa”));

   System.out.println(decode(encode(“aaa”)));

}

/*

* 16进制数字字符集

*/

private static String hexString = “0123456789ABCDEF”;

/*

* 将字符串编码成16进制数字,适用于所有字符(包括中文)

*/

public static String encode(String str) {

   // 根据默认编码获取字节数组

   byte[] bytes = str.getBytes();

   StringBuilder sb = new StringBuilder(bytes.length * 2);

   // 将字节数组中每个字节拆解成2位16进制整数

   for (int i = 0; i  bytes.length; i++) {

    sb.append(hexString.charAt((bytes[i]  0xf0)  4));

    sb.append(hexString.charAt((bytes[i]  0x0f)  0));

   }

   return sb.toString();

}

/*

* 将16进制数字解码成字符串,适用于所有字符(包括中文)

*/

public static String decode(String bytes) {

   ByteArrayOutputStream baos = new ByteArrayOutputStream(

     bytes.length() / 2);

   // 将每2位16进制整数组装成一个字节

   for (int i = 0; i  bytes.length(); i += 2)

    baos.write((hexString.indexOf(bytes.charAt(i))  4 | hexString

      .indexOf(bytes.charAt(i + 1))));

   return new String(baos.toByteArray());

}

// 第二种方法:

// 将指定byte数组以16进制的形式打印到控制台

// 复制代码 代码如下:

/*public class Util {

   public Util() {

   }

   *//**

   * 将指定byte数组以16进制的形式打印到控制台

   * @param hint String

   * @param b byte[]

   * @return void

   *//*

   public static void printHexString(String hint, byte[] b) {

    System.out.print(hint);

    for (int i = 0; i  b.length; i++) {

     String hex = Integer.toHexString(b[i]  0xFF);

     if (hex.length() == 1) {

      hex = ‘0’ + hex;

     }

     System.out.print(hex.toUpperCase() + ” “);

    }

    System.out.println(“”);

   }

   *//**

   * @param b byte[]

   * @return String

   *//*

   public static String Bytes2HexString(byte[] b) {

    String ret = “”;

    for (int i = 0; i  b.length; i++) {

     String hex = Integer.toHexString(b[i]  0xFF);

     if (hex.length() == 1) {

      hex = ‘0’ + hex;

     }

     ret += hex.toUpperCase();

    }

    return ret;

   }

   *//**

   * 将两个ASCII字符合成一个字节; 如:”EF”– 0xEF

   * @param src0 byte

   * @param src1 byte

   * @return byte

   *//*

   public static byte uniteBytes(byte src0, byte src1) {

    byte _b0 = Byte.decode(“0x” + new String(new byte[] { src0 }))

      .byteValue();

    _b0 = (byte) (_b0  4);

    byte _b1 = Byte.decode(“0x” + new String(new byte[] { src1 }))

      .byteValue();

    byte ret = (byte) (_b0 ^ _b1);

    return ret;

   }

   *//**

   * 将指定字符串src,以每两个字符分割转换为16进制形式 如:”2B44EFD9″ — byte[]{0x2B, 0x44, 0xEF, 0xD9}

   * @param src String

   * @return byte[]

   *//*

   public static byte[] HexString2Bytes(String src) {

    byte[] ret = new byte[8];

    byte[] tmp = src.getBytes();

    for (int i = 0; i  8; i++) {

     ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);

    }

    return ret;

   }

}*/

}

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月24日 06:02:12
下一篇 2024年3月24日 06:09:30

相关推荐

  • 深入java虚拟机pdf,深入java虚拟机 中村成洋 pdf

    在linux环境下,java怎么实现从word格式转换为pdf格式 //设置当前使用的打印机,我的Adobe Distiller打印机名字为 Adobe PDF wordCom.setProperty( ActivePrinter , new Variant( Adobe PDF ));//设置printout的参数,将word文档打印为postscript…

    2024年5月23日
    4600
  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4400
  • java绑定一个端口,java使用端口

    java如何多个service共用一个端口 你如果有多个项目的话,你可以把多个项目放到一个tomcat里面,这样端口相同使用项目名称来进行区分项目。你如果非要使用同一个,你也可以配置不同的域名导向不同的项目。就是访问的域名不同转接到的项目不同。 如果需要同时启动多个程序,要么修改tomcat的配置文件中的监听端口。要么修改jar包程序的监听端口。不能在一台服…

    2024年5月23日
    3600
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4500
  • java多线程并发编程基础,Java多线程并发执行返回

    电脑培训分享Java并发编程:核心理论 电脑培训发现本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。 人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接…

    2024年5月23日
    4700
  • javascriptcanvas的简单介绍

    如何使用js在画布上绘制图形 1、可以使用 drawImage()方法把一幅图像绘制到画布上。 以使用三种不同的参数组合。最简单的调用方式是传入一个 HTML 元素,以及绘制该图像的起点的 x 和 y 坐标。 2、效果图:使用JavaScript在画布中绘制文本图形首先我们来看看要在画布上绘制文本图形,需要用到的最重要的属性和方法:font属性:定义文本的字…

    2024年5月23日
    4200
  • 自学java找工作,自学java找工作需要包装简历吗

    自学java学多久可以找到工作 1、自学Java至少需要一年以上的时间才能达到找工作的水平。报班培训四到六个月的时间就可以找到一份不错的工作。 2、自学Java至少需要一年以上的时间才能达到找工作的水平。 3、如果要想找到一份Java相关的工作,需要至少学习5-6个月时间才能就业。Java开发需要掌握一些基础的编程语言知识,比如掌握面向对象的编程思想、基本的…

    2024年5月23日
    4400
  • cortexm4linux的简单介绍

    Cortex-M4的主要功能 Cortex-M4提供了无可比拟的功能,以将[1] 32位控制与领先的数字信号处理技术集成来满足需要很高能效级别的市场。 Cortex-M4核心具有浮点单元(FPU)单精度,支持所有Arm单精度数据处理指令和数据类型。它还实现了一套完整的DSP指令和一个提高应用程序安全性的内存保护单元(MPU)。 主要是m4比m3多了dsp的支…

    2024年5月23日
    4400
  • 3desjavaphp的简单介绍

    php的3des加密结果与java不一致 他们的加密算法都是通用的,是可以解开的,只要你des的模式,加密长度,初始向量什么的都一样就可以。 JAVA写RSA加密,私钥都是一样的,公钥每次加密的结果不一样跟对数据的padding(填充)有关。Padding(填充)属性定义元素边框与元素内容之间的空间。padding简写属性在一个声明中设置所有内边距属性。 要…

    2024年5月23日
    4900
  • java左移右移,java 左移

    java位移问题 1、思路:直接用Integer类的bit运算操作。 2、移位操作:左移:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。 3、Java 位运算 Java 位运算[转]一,Java 位运算表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的…

    2024年5月23日
    4300

发表回复

登录后才能评论



关注微信