问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。
答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。
java 代码
- public static String byteToString(byte b) {
- byte high, low;
- byte maskHigh = (byte)0xf0;
- byte maskLow = 0x0f;
-
- high = (byte)((b & maskHigh) >> 4);
- low = (byte)(b & maskLow);
-
- StringBuffer buf = new StringBuffer();
- buf.append(findHex(high));
- buf.append(findHex(low));
-
- return buf.toString();
- }
-
- private static char findHex(byte b) {
- int t = new Byte(b).intValue();
- t = t < 0 ? t + 16 : t;
-
- if ((0 <= t) &&(t <= 9)) {
- return (char)(t + '0');
- }
-
- return (char)(t-10+'A');
- }
-
未解决的疑问在java中不存在类似C中的无符号量,所以如果一个字节超过0x80其对应的整型值即为负值,但在高位右移4位后还是负值,且与对应的正值相差16,比如0xB2经过右移后的期望值是0x0B(11)但实际值是-5与预期的值相差16(这个16通过多次试验得出),对此现象为找到合理的解释。
问题2:“String a=”B2” --> byte b=0xB2”字符的byte转换为byte数据类型
答:思路通过Integer作为转换的中间桥梁
java 代码
- public static int stringToByte(String in, byte[] b) throws Exception {
- if (b.length < in.length() / 2) {
- throw new Exception("byte array too small");
- }
-
- int j=0;
- StringBuffer buf = new StringBuffer(2);
- for (int i=0; i
- buf.insert(0, in.charAt(i));
- buf.insert(1, in.charAt(i+1));
- int t = Integer.parseInt(buf.toString(),16);
- System.out.println("byte hex value:" + t);
- b[j] = (byte)t;
- i++;
- buf.delete(0,2);
- }
-
- return j;
- }
-
问题3:整数(表示范围限定为两个字节unsigned short)通过Integer.byteValue()转换成byte[2],如果超出一个byte的表示范围将会截断高位的值。
答:思路一个byte能表示的最大整数为256(超过128为负值,超过256将被截断),所以取256的倍数为byte[0],256的余数为byte[1]。
java 代码
- byte[] d = new byte[l+2];
- ….
- buff.put(new Integer(l/256).byteValue());
- buff.put(new Integer(l%256).byteValue());
分享到:
相关推荐
马士兵JAVA笔记(全) 本资源是马士兵的JAVA笔记,涵盖了JAVA语言的基础知识,包括标识符、常量、变量、数据类型、运算符、控制流语句等。 标识符是JAVA中的一种符号,用于命名变量、方法、类等。标识符由字母、...
Java 中有两种类型转换:自动类型转换和强制类型转换。 自动类型转换 自动类型转换是指将一个小范围的数据类型赋值给一个大范围的数据类型,例如: ```java int x = 10; long y = x; // 自动类型转换 ``` 强制...
Apache作为流行的开源项目组织,也提供了许多Java相关的工具和技术。本篇笔记主要涵盖了Java的基础知识,包括数据类型、转换、运算符、控制结构以及数组等内容。 1. **基本数据类型** Java中有八种基本数据类型:...
- **字符串**:在Java中,字符串是由`String`类表示的对象。字符串可以通过`+`操作符进行拼接,也可以通过`+`操作符将其他类型的对象转换成字符串。 ### 控制结构 - **条件语句** - **`if`语句**:用于根据条件...
字符串与字节之间的转换涉及到编码问题,如`getBytes()`和`new String(byte[], charset)`。Java默认使用平台的默认字符集,但应尽量明确指定如`getBytes("UTF-8")`。 以上内容是基于"JAVA 字符串应用笔记"可能涵盖...
**字符串**:Java 中的字符串是不可变的对象,可以通过 `String` 类来创建和操作字符串。 **转义序列**:Java 支持多种转义序列来表示特殊字符,例如 `\n` 表示换行,`\t` 表示制表符等。 ### 6. Java 运算符与...
这篇学习笔记主要涵盖了Java的基础知识,包括注释、代码结构、标识符、数据类型、命名规则、对象理解,以及表达式和控制流程等核心概念。 1. **注释**:Java中的注释主要有三种形式。`//`用于单行注释,`/* ... */`...
- Java中的`switch`语句可以接受`int`、`byte`、`short`和`char`类型的表达式。 #### 四、Java面向对象编程 - **方法**: - `return`关键字用于从方法中返回一个值,并终止方法的执行。 - Java中参数传递遵循值...
Java语言程序设计学习笔记是为初学者和有一定基础的开发者准备的一份详尽教程,它涵盖了从基础到进阶的各个重要知识点。这份笔记以Markdown(md)文件的形式组织,便于阅读和检索,使得学习过程更为高效。 首先,...
总的来说,Java的基础知识包括基本数据类型的理解与使用、String类的特性与操作、数组的声明、初始化和使用,以及基础数据类型与对象之间的转换。熟练掌握这些概念是成为Java程序员的第一步,也是进一步学习高级特性...
Java 中提供了 8 种包装类,它们分别是 Boolean、Byte、Short、Integer、Long、Character、Float 和 Double。这些包装类的出现是为了解决基本数据类型不能作为对象的问题。 6.2.1 为什么需要包装类 在 Java 中,...
本篇笔记旨在为初学者提供一份详尽的Java学习指南,从基础知识入手,逐步深入到更复杂的概念和技术点,帮助读者实现从入门到精通的过程。 ##### Java程序结构 一个典型的Java程序结构包括: ```java public class...
### Java学习笔记精简版详解 #### Java的起源与第一个程序 Java由Sun Microsystems公司于1994年左右为了开发家电系统中的程序而发明,最初名为Oak,后改名为Java。Java的设计初衷是为了克服C语言在嵌入式系统开发...
### JAVA课堂笔记精要 #### JVM与Java执行过程 Java程序的执行依赖于JVM(Java虚拟机),它是运行Java字节码的标准平台。当Java程序执行时,`.java`源代码文件首先被编译成`.class`文件,然后由JVM解释执行。JVM在...
Java基础笔记是一份适合初学者的文档,涵盖了Java编程语言的核心概念和基本知识点,包括标识符的规则、数据类型的分类和使用、变量的声明与初始化、运算符的使用规则、控制流程语句(如if-else和switch-case)以及...
以上是对Java中的数据类型、变量、类型转换、运算符等内容进行了详细介绍。掌握这些基础知识对于学习Java编程至关重要。无论是对数据类型的了解还是对各种运算符的应用,都是编写高效、可维护代码的基础。希望这些...