问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。
答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。
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作为转换的中间桥梁
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<in.length(); i++, j++) {
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]。
byte[] d = new byte[l+2];
….
buff.put(new Integer(l/256).byteValue());
buff.put(new Integer(l%256).byteValue());
< type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}
byte[]到short、int、long的相互转换
public final static byte[] getBytes(short s, boolean asc) {
byte[] buf = new byte[2];
if (asc) for (int i = buf.length - 1; i >= 0; i--) { buf[i] = (byte) (s & 0x00ff);
s >>= 8;
}
else
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) (s & 0x00ff);
s >>= 8;
}
return buf;
}
public final static byte[] getBytes(int s, boolean asc) {
byte[] buf = new byte[4];
if (asc)
for (int i = buf.length - 1; i >= 0; i--) {
buf[i] = (byte) (s & 0x000000ff);
s >>= 8;
}
else
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) (s & 0x000000ff);
s >>= 8;
}
return buf;
}
public final static byte[] getBytes(long s, boolean asc) {
byte[] buf = new byte[8];
if (asc)
for (int i = buf.length - 1; i >= 0; i--) {
buf[i] = (byte) (s & 0x00000000000000ff);
s >>= 8;
}
else
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) (s & 0x00000000000000ff);
s >>= 8;
}
return buf;
}
public final static short getShort(byte[] buf, boolean asc) {
if (buf == null) {
throw new IllegalArgumentException("byte array is null!");
}
if (buf.length > 2) {
throw new IllegalArgumentException("byte array size > 2 !");
}
short r = 0;
if (asc)
for (int i = buf.length - 1; i >= 0; i--) {
r <<= 8;
r |= (buf[i] & 0x00ff);
}
else
for (int i = 0; i < buf.length; i++) {
r <<= 8;
r |= (buf[i] & 0x00ff);
}
return r;
}
public final static int getInt(byte[] buf, boolean asc) {
if (buf == null) {
throw new IllegalArgumentException("byte array is null!");
}
if (buf.length > 4) {
throw new IllegalArgumentException("byte array size > 4 !");
}
int r = 0;
if (asc)
for (int i = buf.length - 1; i >= 0; i--) {
r <<= 8;
r |= (buf[i] & 0x000000ff);
}
else
for (int i = 0; i < buf.length; i++) {
r <<= 8;
r |= (buf[i] & 0x000000ff);
}
return r;
}
public final static long getLong(byte[] buf, boolean asc) {
if (buf == null) {
throw new IllegalArgumentException("byte array is null!");
}
if (buf.length >
{
throw new IllegalArgumentException("byte array size > 8 !");
}
long r = 0;
if (asc)
for (int i = buf.length - 1; i >= 0; i--) {
r <<= 8;
r |= (buf[i] & 0x00000000000000ff);
}
else
for (int i = 0; i < buf.length; i++) {
r <<= 8;
r |= (buf[i] & 0x00000000000000ff);
}
return r;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/s_ongfei/archive/2007/06/14/1652740.aspx
分享到:
相关推荐
整数型可以分为byte、short、int、long四种,分别占1、2、4、8个字节。浮点型可以分为float和double两种,分别占4、8个字节。需要注意的是,在声明浮点型变量时,需要加f或F,例如float f=12.3f; 基本数据类型可以...
Java 中有两种类型转换:自动类型转换和强制类型转换。 自动类型转换 自动类型转换是指将一个小范围的数据类型赋值给一个大范围的数据类型,例如: ```java int x = 10; long y = x; // 自动类型转换 ``` 强制...
Java中有八种基本数据类型:整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。浮点数在计算机中以特定格式存储,包括符号位、指数位和尾数位。字符类型可以表示...
Java有八种基本数据类型:整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean)。除此之外,还有引用数据类型,如类、接口和数组。变量是存储值的容器,必须先声明数据类型...
- **字符串**:在Java中,字符串是由`String`类表示的对象。字符串可以通过`+`操作符进行拼接,也可以通过`+`操作符将其他类型的对象转换成字符串。 ### 控制结构 - **条件语句** - **`if`语句**:用于根据条件...
**字符串**:Java 中的字符串是不可变的对象,可以通过 `String` 类来创建和操作字符串。 **转义序列**:Java 支持多种转义序列来表示特殊字符,例如 `\n` 表示换行,`\t` 表示制表符等。 ### 6. Java 运算符与...
4. **数据类型**:Java有八种基本数据类型,分为整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean)。其中,long和float在表示数值时需要后缀(如`L`或`l`,`f`或`F`),...
Java中的包装类是Java语言设计的一个重要特性,它们在Java SE中扮演着至关重要的角色,尤其是在处理基本数据类型和对象之间的转换时。包装类为Java的基本数据类型提供了面向对象的接口,使得我们可以将基本类型的值...
整数型有byte、short、int和long,分别占据8、16、32和64位;浮点型包括float(32位)和double(64位),用于存储小数;字符型char占据16位,用于存储单个字符,如字母或数字。在Java中,基本数据类型的变量可以直接...
本篇笔记将深入探讨Java中的数据类型,包括基本数据类型和运算符。 首先,我们来了解一下Java的基本数据类型,它们分为两大类:原始类型(Primitive Types)和引用类型(Reference Types)。在本笔记中主要讨论的是...
- 整数类型有`byte`、`short`、`int`、`long`。 - 浮点类型有`float`、`double`。 - 字符类型`char`。 - 布尔类型`boolean`。 这些基本数据类型的默认值如下: - `byte`:0 - `short`:0 - `int`:0 - `long`:...
基本数据类型包括整数型(byte、short、int、long)、浮点型(float、double)、字符型(char)和逻辑型(boolean)。其中,整数型默认为int,浮点型默认为double,字符型用单引号括起,逻辑型只有true和false两个值...
Java 中的基本数据类型包括 Byte、short、int、long、float、double、char 和 boolean 等。这些基本数据类型都具有不同的取值范围和占用内存空间。 九、转义字符 Java 中的转义字符包括 \ddd、\uxxxx、'、"、\\、\...
Java 中提供了 8 种包装类,它们分别是 Boolean、Byte、Short、Integer、Long、Character、Float 和 Double。这些包装类的出现是为了解决基本数据类型不能作为对象的问题。 6.2.1 为什么需要包装类 在 Java 中,...
* 数据类型:java中有八种基本数据类型:byte、short、int、long、float、double、boolean、char。 * 运算符:java中的运算符包括算术运算符、比较运算符、逻辑运算符、赋值运算符等。 * 控制流程语句:java中的控制...
- Java中的`switch`语句可以接受`int`、`byte`、`short`和`char`类型的表达式。 #### 四、Java面向对象编程 - **方法**: - `return`关键字用于从方法中返回一个值,并终止方法的执行。 - Java中参数传递遵循值...
3. **基本数据类型**:包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。了解它们的取值范围和默认值。 4. **变量与常量**:声明、初始化和使用变量,以及定义...
整数类型包括byte、short、int和long,而小数类型包括float和double。基本数据类型的变量在声明时需要指定其类型,而引用数据类型则指向一个对象的引用。 - byte类型占用1字节(8位),范围为-128到127。 - short...