android byte转字符串,Andriod | Byte和String的相互转换
核心: String和Byte间的相互转换
1.png
几行代码,教你最简单的转换, 然鹅,在实际应用过程中,数据的复杂性不只是我们简单的两句话就可以转换了的.那么就来看一下我昨天遇到的问题
需求: 和硬件交互,发过来的报文是byte[]格式, 一个byte[]中包含了几条信息,所以我本地要去根据制定的相关协议去解析.
问题: 传来的byte[]中, 每个信息长度所占字节是我们协议预先设置好的, 但是在实际用的过程中因为字符长短不一, 所以传过来虽然字节长度固定,但是可用字节是无法获取的. 这样一来,直接用new String();转换,会出现如下异常
2.png
可以看到,在我们的有效字符后全是乱码, 造成的原因是什么呢?
就是在协议的 byte[]中该字符最长占36个字节. 但实际该字符占20个字节, 这样不足位就会补0 ,也就是所说的\0结束符. 直到补够36个字节. 我循环打印了一下我收到的byte[], 可以看一下
3.png
4.png
后面的0就是造成上述乱码的原因.
解决:
1.熟悉C的人应该觉得这不是什么难事,因为C中提供了一个函数: strcpy. 可以吧从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间.(此函数和图3中System.arraycopy函数类似. 不懂的自行百度. 本文不做过多介绍).
简单的来说就是, C中通过strcpy函数可以自动复制有结束符之前的内容. 但是,我的开发环境是android.所以此路行不通.
2.因为打印出来直观看到的就是0. java中 String提供了个api是 replace. 那可以直接用replace将0替换成其他内容. 我们来试一下;
5.png
6.png
这样, 后面的乱码问题就解决了. 但是因为是将\0替换成了空格字符,所以后面还有占位,下面就需要用到trim()函数.就可以解决了
简单的概括一下就是: 1.替换 2.去空格
3.既然知道了问题的所在, 那么解决的方法就有很多种. 下面再说一种.
用indexOf('\0'); 函数找出第一个出现结束符的下标, 然后用substring();截取字符就ok了
简单的概括一下就是: 1.找到下标 2.截取字符
至此, 所有问题完美解决.
因为和硬件的交互是不断地,今后可能也会再遇到类似问题,所以写篇文章记录一下.可以随时查阅.
写文章的时候就是又复习了一遍, 日后查阅印象也会更加深刻.好习惯要保持下去.
android byte转字符串,Andriod | Byte和String的相互转换相关推荐
- 几种字符串到byte[] 数组转化为String 的方法
< language="javascript" src="/ad/js/edu_left_300-300.js" type="text/java ...
- iOS -- 十进制、十六进制字符串,byte,data等之间的转换
十进制->十六进制 Byte bytes[]={0xA6,0x27,0x0A}; NSString *strIdL = [NSStringstringWithFormat:@"%@&q ...
- 串口开发,数据类型转换——字符串转 byte[],byte[]转二进制,二进制转十进制转byte[],byte[]转十进制,byte[]拼接,校验
bytez转String /*** 字节数组转换成对应的16进制表示的字符串** @param src* @return*/ public static String bytes2HexStr(byt ...
- android调用.Net WebService传递byte[]
android调用.Net WebService传递byte[] android端代码: SoapObject request = new SoapObject(Constant.NAMESPACE, ...
- C#中如何将字符串转换byte[],同时如何将byte[]换成字符串?
C#中如何将字符串转换byte[],同时如何将byte[]换成字符串? 博客分类: C# CC++C# 1 string to byte [] string str = ...
- java字符串字节_Java中字符串与byte数组之间的相互转换
前言 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成byte数组型,java在字符与数组转换也是非常方便的.下面跟我一起来了解一下字符串与byte之间转换的原理 ...
- 二进制样式的字符串与byte数组互转函数示例
开发时用到的方法,记录下: /// <summary>/// 测试方法 /// </summary>private void TestFun(){Response.Write( ...
- 十六进制字符串与byte数组与ASCII码互相转换
日常工作中,对接一些硬件使用tcp通信,需要将输入输出流转16进制字符串再在表中找到与其对应的ASCII码,并转换作为结果.因此,这里整理了一个工具类,用于这三者的相互转换. 十六进制字符串转byte ...
- C#中字节数组(byte[])和字符串相互转换
转换过程主要使用到System.Text.Encoding命名空间下的类 1. 字符串转换成字节数组byte[]: string str = "This is test string&quo ...
最新文章
- BZOJ1922: [Sdoi2010]大陆争霸
- 孤儿进程与僵尸进程[总结]
- 中国半光漆市场需求前景与投资规划研究报告2021年版
- hdu 1532(最大流)
- 把html追加到指定id后面,javascript – jQuery,动态追加元素时增加id号
- EOS page问题
- DXperience,不能不爱
- 11. OD-Delphi程序暴力破解
- 云垒·私有云一体化安全管理平台
- JavaScript闭包初相识
- 2017 年最受欢迎的 10个编程挑战网站
- Mac SecureCRT 下载、安装详细步骤
- 日语五十音平假名 识读卡片 笔顺
- 使用PS将图片自然从清晰到模糊过渡
- 18年,中国互联网的产品墓场
- iMovie 裁剪视频
- No.476 数字的补数
- 云脉OCR文档管理软件档案加工管理必备
- 华为视频显示服务器异常,给予用户一份贴心|(数十份案例)APP异常界面与Toast产品设计落地...
- sicp3.5.2、3.5.3节部分习题尝试解答