JAVA里面关于byte数组和String之间的转换问题

合集下载

数组转字符串的方法java

数组转字符串的方法java

数组转字符串的方法java1. In troduction在J av a中,当我们需要将数组转换为字符串时,有几种常用的方法可以实现。

本文将介绍这些方法,并提供相应的示例代码。

2.使用`String.join()`方法`S tr in g.jo in()`方法是自JD K8引入的一个方便的方法,可以将数组中的元素用指定的分隔符连接起来形成一个字符串。

```j av a//定义一个整型数组i n t[]n um s={1,2,3,4,5};//使用St ri ng.j oin()方法将数组转换为字符串,以逗号作为分隔符S t ri ng st r=St ri ng.j oi n(",",Ar ra ys.s tr ea m(nu ms).map T oO bj( S t ri ng::va lu eO f).t oA rr ay(S tr in g[]::n ew));S y st em.o ut.p ri ntl n(s tr);```输出结果:```p la in te xt1,2,3,4,5```3.使用`String Builde r`类`S tr in gB ui ld er`类提供了一个灵活的方式来构建字符串。

我们可以使用其`ap pe nd()`方法来追加数组中的元素,然后使用`toS t ri n g()`方法将其转换为字符串。

```j av a//定义一个字符串数组S t ri ng[]fr ui ts={"a pp le","b an an a","or an ge","g ra pe"};//使用St ri ng Bu ild e r来转换数组为字符串S t ri ng Bu il de rs b=n e wS tr in gB ui ld er();f o r(St ri ng fr ui t:f r ui ts){s b.a pp en d(fr ui t).a pp en d(",");}s b.d el et eC ha rA t(s b.l en gt h()-1);//删除最后一个逗号S t ri ng st r=sb.t oSt r in g();S y st em.o ut.p ri ntl n(s tr);```输出结果:```p la in te xta p pl e,ba na na,o ran g e,gr ap e```4.使用`String Buffer`类与`St ri ng Bu il de r`类类似,`St ri ng Bu f fe r`类也提供了类似的功能来构建字符串。

inputStream和String,Byte之间的转换

inputStream和String,Byte之间的转换

1.import java.io.ByteArrayInputStream;2.import java.io.ByteArrayOutputStream;3.import java.io.IOException;4.import java.io.InputStream;5.6./**7. *8. * @author Andy.Chen9. * @mail Chenjunjun.ZJ@10. *11. */12.public class InputStreamUtils {13.14. final static int BUFFER_SIZE = 4096;15.16. /**17. * 将InputStream转换成String18. * @param in InputStream19. * @return String20. * @throws Exception21. *22. */23. public static String InputStreamTOString(InputStream in) throws Exception{24.25. ByteArrayOutputStream outStream = new ByteArrayOutputStream();26. byte[] data = new byte[BUFFER_SIZE];27. int count = -1;28. while((count = in.read(data,0,BUFFER_SIZE)) != -1)29. outStream.write(data, 0, count);30.31.data = null;32. return new String(outStream.toByteArray(),"ISO-8859-1");33. }34.35. /**36. * 将InputStream转换成某种字符编码的String37. * @param in38. * @param encoding39. * @return40. * @throws Exception41. */42. public static String InputStreamTOString(InputStream in,String encoding) throws Exception{43.44. ByteArrayOutputStream outStream = new ByteArrayOutputStream();45. byte[] data = new byte[BUFFER_SIZE];46. int count = -1;47. while((count = in.read(data,0,BUFFER_SIZE)) != -1)48. outStream.write(data, 0, count);49.50.data = null;51. return new String(outStream.toByteArray(),"ISO-8859-1");52. }53.54. /**55. * 将String转换成InputStream56. * @param in57. * @return58. * @throws Exception59. */60. public static InputStream StringTOInputStream(String in) throws Exception{61.62. ByteArrayInputStream is = new ByteArrayInputStream(in.getBytes("ISO-8859-1"));63. return is;64. }65.66. /**67. * 将InputStream转换成byte数组68. * @param in InputStream69. * @return byte[]70. * @throws IOException71. */72. public static byte[] InputStreamTOByte(InputStream in) throws IOException{73.74. ByteArrayOutputStream outStream = new ByteArrayOutputStream();75. byte[] data = new byte[BUFFER_SIZE];76. int count = -1;77. while((count = in.read(data,0,BUFFER_SIZE)) != -1)78. outStream.write(data, 0, count);79.80.data = null;81. return outStream.toByteArray();82. }83.84. /**85. * 将byte数组转换成InputStream86. * @param in87. * @return88. * @throws Exception89. */90. public static InputStream byteTOInputStream(byte[] in) throws Exception{91.92. ByteArrayInputStream is = new ByteArrayInputStream(in);93. return is;94. }95.96. /**97. * 将byte数组转换成String98. * @param in99. * @return100. * @throws Exception101. */102. public static String byteTOString(byte[] in) throws Exception{ 103.104. InputStream is = byteTOInputStream(in);105. return InputStreamTOString(is);106. }107.108.}。

ArkTS如何实现string和byte数组互转

ArkTS如何实现string和byte数组互转

ArkTS如何实现string和byte数组互转ArkTS如何实现string和byte数组互转作者:坚果,公众号:”大前端之旅“,哔哩哔哩,OpenHarmony布道师,OpenHarmony校源行开源大使,电子发烧友鸿蒙MVP,51CTO博客专家博主,阿里云博客专家。

Unicode是一种在计算机上使用的字符编码。

它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

本文通过代码来完成string和byte数组互转。

附完整代码function stringToByte(str) {var bytes = new Array();var len,c;len = str.length;for(var i = 0;i<len;i++) {c = str.charCodeAt(i);if( c >= 0x010000 && c<= 0x10FFFF) {bytes.push(((c>>18) & 0x07) | 0xf0);bytes.push(((c>>12) & 0x3F) | 0x80);bytes.push(((c>>6) & 0x3f) | 0x80);bytes.push((c & 0x3F) | 0x80);} else if(c >= 0x000800 && c<= 0x00FFF){bytes.push(((c>>12) & 0x07) | 0xf0);bytes.push(((c>>6) & 0x3F) | 0x80);bytes.push((c & 0x3F) | 0x80);} else if(c >= 0x000800 && c<= 0x0007FF) {bytes.push(((c>>6) & 0x3F) | 0x80);bytes.push((c & 0x3F) | 0x80);} else {bytes.push(c & 0xFF)}}return bytes;}function byteT oString(arr) {if(typeof arr === 'string') {return arr;}var str = '',_arr = arr;for(var i = 0; i < _arr.length; i++) {var one = _arr[i].toString(2),v = one.match(/^1+?(?=0)/);if(v && one.length == 8) {var bytesLength = v[0].length;var store = _arr[i].toString(2).slice(7 - bytesLength); for(var st = 1; st < bytesLength; st++) {store += _arr[st + i].toString(2).slice(2);}str += String.fromCharCode(parseInt(store, 2));i += bytesLength - 1;} else {str += String.fromCharCode(_arr[i]);}}return str;}@Entry@Componentstruct Index {@State context:string="格式转换"build() {Row() {Column() {Text(this.context).fontSize(50).fontWeight(FontWeight.Bold).onClick(()=>{})Text("byte转string").fontSize(50).fontWeight(FontWeight.Bold).onClick(()=>{this.context=JSON.stringify(byteT oString([200,156]))})Text("string转byte").fontSize(50).fontWeight(FontWeight.Bold).onClick(()=>{this.context=JSON.stringify(stringToByte("坚果"))})}.width('100%')}.height('100%')}}关于运行后的效果,大家可以自己试一下。

[转]Java中byte与16进制字符串的互相转换

[转]Java中byte与16进制字符串的互相转换

[转]Java中byte与16进制字符串的互相转换本⽂转⾃:Java中byte⽤⼆进制表⽰占⽤8位,⽽我们知道16进制的每个字符需要⽤4位⼆进制位来表⽰(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的⾼4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。

即byte⽤⼗六进制表⽰只占2位。

同理,相反的转换也是将两个16进制字符转换成⼀个byte,原理同上。

根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了。

/**Java代码1. * Convert byte[] to hex string.这⾥我们可以将byte转换成int,然后利⽤Integer.toHexString(int)来转换成16进制字符串。

2. * @param src byte[] data3. * @return hex string4. */5. public static String bytesToHexString(byte[] src){6. StringBuilder stringBuilder = new StringBuilder("");7. if (src == null || src.length <= 0) {8. return null;9. }10. for (int i = 0; i < src.length; i++) {11. int v = src[i] & 0xFF;12. String hv = Integer.toHexString(v);13. if (hv.length() < 2) {14. stringBuilder.append(0);15. }16. stringBuilder.append(hv);17. }18. return stringBuilder.toString();19. }20. /**21. * Convert hex string to byte[]22. * @param hexString the hex string23. * @return byte[]24. */25. public static byte[] hexStringToBytes(String hexString) {26. if (hexString == null || hexString.equals("")) {27. return null;28. }29. hexString = hexString.toUpperCase();30. int length = hexString.length() / 2;31. char[] hexChars = hexString.toCharArray();32. byte[] d = new byte[length];33. for (int i = 0; i < length; i++) {34. int pos = i * 2;35. d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));36. }37. return d;38. }39. /**40. * Convert char to byte41. * @param c char42. * @return byte43. */44. private byte charToByte(char c) {45. return (byte) "0123456789ABCDEF".indexOf(c);46. }Java代码1. //将指定byte数组以16进制的形式打印到控制台2. public static void printHexString( byte[] b) {3. for (int i = 0; i < b.length; i++) {4. String hex = Integer.toHexString(b[i] & 0xFF);5. if (hex.length() == 1) {6. hex = '0' + hex;7. }8. System.out.print(hex.toUpperCase() );9. }10.11. }java中byte转换int时为何与0xff进⾏与运算在剖析该问题前请看如下代码Java代码1. public static String bytes2HexString(byte[] b) {2. String ret = "";3. for (int i = 0; i < b.length; i++) {4. String hex = Integer.toHexString(b[ i ] & 0xFF);5. if (hex.length() == 1) {6. hex = '0' + hex;7. }8. ret += hex.toUpperCase();9. }10. return ret;11. }上⾯是将byte[]转化⼗六进制的字符串,注意这⾥b[ i ] & 0xFF将⼀个byte和 0xFF进⾏了与运算,然后使⽤Integer.toHexString取得了⼗六进制字符串,可以看出b[ i ] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进⾏与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不⾏吗?答案是不⾏的.其原因在于:1.byte的⼤⼩为8bits⽽int的⼤⼩为32bits2.java的⼆进制采⽤的是补码形式在这⾥先温习下计算机基础理论byte是⼀个字节保存的,有8个位,即8个0、1。

java string 转换字节数组原理

java string 转换字节数组原理

java string 转换字节数组原理Java中的字符串是由一系列Unicode字符组成的。

而字节数组则是由一系列的字节组成的。

在Java中,我们可以通过以下方式将字符串转换为字节数组:1. 使用getBytes()方法:Java提供了一个方便的方法getBytes(),该方法可以将字符串转换为字节数组。

它可以接受一个可选的字符集参数,用于指定字符编码。

例如,以下代码将字符串转换为字节数组:```javaString str = "Hello";byte[] byteArray = str.getBytes();```在此示例中,字符串"Hello"被转换为字节数组byteArray。

2. 手动转换:我们可以使用String类的toCharArray()方法将字符串转换为字符数组,然后遍历字符数组并将每个字符转换为字节。

例如,以下代码将字符串转换为字节数组:```javaString str = "Hello";char[] charArray = str.toCharArray();byte[] byteArray = new byte[charArray.length];for (int i = 0; i < charArray.length; i++) {byteArray[i] = (byte) charArray[i];}```在此示例中,首先将字符串"Hello"转换为char数组charArray,然后通过循环将每个字符转换为字节并存储在字节数组byteArray中。

无论是使用getBytes()方法还是手动转换,都需要注意字符编码。

如果未指定字符集参数,则默认使用平台的默认字符编码。

如果字符串包含非ASCII字符,则建议明确指定字符编码,例如UTF-8或UTF-16。

这些是将Java字符串转换为字节数组的原理和实现方法。

java基本数据类型之间的转换

java基本数据类型之间的转换

java基本数据类型之间的转换Java是一门强类型语言,变量需要明确指定其数据类型。

Java中含有8个基本数据类型,它们是boolean、byte、short、int、long、float、double和char。

在Java编程中,有时也需要对这些基本数据类型进行一些转换。

本文将围绕Java基本数据类型之间的转换展开。

一、自动类型转换Java中可以将一种数据类型的变量赋值给另一种数据类型的变量,这种转换称为自动类型转换。

自动类型转换是指从小类型到大类型的转换过程, Java在内部进行转换,无需开发人员进行显式的操作。

例如,将一个byte类型的变量赋值给int类型的变量:byte b = 10;int i = b;在这个过程中,Java自动将byte类型的变量b转换成int类型,并将其赋值给i。

二、强制类型转换有时需要对一个变量强制转换为另一种类型,这种转换称为强制类型转换。

强制类型转换是从大类型到小类型的转换过程,在进行强制类型转换时,需要在转换前使用小括号指定要转换的类型。

例如,将一个double类型的变量强制转换成int类型:double d = 10.5;int i = (int)d;在这个过程中,Java会将double类型的变量d转换成int类型,并将其赋值给i。

需要注意的是,在进行强制类型转换时,可能会出现数据精度丢失的情况。

三、字符类型转换在Java中,char类型可以被当做数字来处理,它与int类型可以互相转换。

在Java中,可以使用强制类型转换将字符类型转换成整型,例如:char c = 'a';int i = (int)c;在这个过程中,字符'a'会被转换成对应的ASCII码97。

四、字符串类型转换Java中的字符串类型与其他基本数据类型之间的转换需要借助于包装类。

Java中含有六个与基本数据类型对应的包装类,它们是Boolean、Byte、Short、Integer、Long、Float、Double和Character。

byte数组转换成string的方法积累

byte数组转换成string的方法积累

byte 数组转换成string 的方法积累.net 的加密算法,返回的都是byte[] 类型,在存贮起来让人非常头疼,最简单的方法就是把byte[] 转换成string 来存贮,当然如果数据量大的话,另当别论。

所以我就把byte[] 转换成string 的方法做一个简单的积累与分析。

目前有 3 种我觉得比较简单的方案来进行转化。

1.Convert.ToBase64String 与Convert.FromBase64String 此方法简单实用。

转换成的string 包含:26 个英文字母的大小写、+、/、0~9 的数字,总共64 个字符。

一般会在结尾出现“ =”。

分析其原因很简单。

原理:用64 个字符来描述6bit 的二进制。

方式:把byte 数据连在一起,以6bit 为单位进行分组,使用64个字符描述6bit数据,如果分组不足6bit,使用“=”补全 2.自己写代码,使用16 进制字符0~9、A~F 来描述数据。

原理:使用16 个字符来描述4bit 的二进制。

也就是说,个byte 要使用两个16 进制字符来进行描述。

方式:对每一byte 的前半部分与后半部分分别用字符来描述。

此方法需要自己手动进行书写,代码相当简单。

可以Crtl+c Ctrl+v 拿来就用。

public static string ByteToString(byte[] bytes)StringBuilder strBuilder = new StringBuilder();foreach (byte bt in bytes) strBuilder.AppendFormat("{0:X2}", bt);return strBuilder.ToString();public static byte[] StringToByte(string str){byte[] bytes = new byte[str.Length / 2];for (int i = 0; i &lt; str.Length / 2; i++) int btvalue = Convert.ToInt32(str.Substring(i * 2, 2), 16);bytes[i] = (byte)btvalue;return bytes;3.使用Encoding 的编码自动转化Encoding.GetEncoding(" 编码格式").GetString() 和Encoding.GetEncoding(" 编码格式").GetBytes()原理:使用编辑规则强行转换。

java byte转string的方法

java byte转string的方法

java byte转string的方法Java中byte类型是一种8位的有符号整数类型,范围为-128到127。

在某些情况下,我们需要将byte类型转换为String类型。

本文将介绍几种Java中将byte转换为String的方法。

方法一:使用String的valueOf方法String类中的valueOf方法可以将任意类型的数据转换为String类型。

我们可以使用valueOf方法将byte类型转换为String类型。

示例代码如下:```javabyte b = 65;String str = String.valueOf(b);System.out.println(str);```输出结果为:```65```方法二:使用String的构造方法String类提供了多个构造方法,其中一个可以接受byte类型的参数。

我们可以使用这个构造方法将byte类型转换为String类型。

示例代码如下:```javabyte b = 65;String str = new String(new byte[]{b});System.out.println(str);```输出结果为:```A```方法三:使用Byte的toString方法Byte类是byte的包装类,它提供了一个toString方法,可以将byte类型转换为String类型。

示例代码如下:```javabyte b = 65;String str = Byte.toString(b);System.out.println(str);```输出结果为:```65```方法四:使用StringBuilder类StringBuilder类是一个可变的字符串类,它提供了append方法用于字符串的拼接。

我们可以使用append方法将byte类型的数据拼接成一个字符串。

示例代码如下:```javabyte b = 65;StringBuilder sb = new StringBuilder();sb.append(b);String str = sb.toString();System.out.println(str);```输出结果为:```65```方法五:使用String的format方法String类提供了一个format方法,可以使用格式化字符串将byte类型转换为String类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JAVA里面关于byte数组和String之间的转换问题把byte转化成string,必须经过编码。

例如下面一个例子:
import java.io.UnsupportedEncodingException; public class test{
public static void main(String g[]) {
String s = "12345abcd";
byte b[] = s.getBytes();
String t = b.toString();
System.out.println(t);
}
}
输出字符串的结果和字符串s不一样了.
经过以下方式转码就可以正确转换了:
public class test{
public static void main(String g[]) {
String s = "12345abcd";
byte b[] = s.getBytes();
try {
String t = new String(b);
System.out.print(t);
} catch (Exception e) {
e.printStackTrace();
}
}
}
String str = "String";
byte[] byte1 = str.getBytes();
String str1 = new String(byte1);
byte[] byte2 = str1.getBytes();
String str2 = new String(byte2);
System.out.println("str<<<" + str);
System.out.println("byte1<<<" + byte1);
System.out.println("str1<<<" + str1);
System.out.println("byte2<<<" + byte2);
System.out.println("str2<<<" + str2);
-------------------------------------
输出结果
str<<<String
byte1<<<[B@192d342
str1<<<String
byte2<<<[B@6b97fd
str2<<<String
想请教为什么两个byte输出的不一样呢?
String str = "String";
byte[] byte1 = str.getBytes();
String str1 = new String(byte1);
byte[] byte2 = str1.getBytes();
----------
注意byte1是str得到的byte数组,而byte2是另一个字符串str1得到的数组
他们本身也是两个对象
直接打印实际上调用的是toString()方法,而toString()的默认实现是打印对象类型+hashCode()
[B表示byte数组
@表示之后的是地址
后面跟着的是hashCode,其实就是其虚拟机地址
所以这个结果也就是顺理成章了.。

相关文档
最新文档