最近在做一个项目,需要和C++通讯,双方通讯没有采用JNI的方式进行,使用字节序的方式进行进行(字节序就是所谓双方把协议定义好,按顺序进行接收),刚开始测试的时候未注意C++的unsigned int 类型,当一次测试忽然想起,JAVA是有符号的数据类型,最高位表示符号类型那个,如果无符号类型接收有符号的类型int, 那就用LONG,然后发现是错误的,发现高位的32位存在值,低32位是无符号类型INT发过来的值,然后想到一个方法就是对字节进行与和位移的操作,希望以下代码能对大家有用:
public static void main(String args[]){
short anUnsignedByte = 0;
char anUnsignedShort = 0;
long anUnsignedInt = 0;
int firstByte = 0;
int secondByte = 0;
int thirdByte = 0;
int fourthByte = 0;
byte buf[] = getMeSomeData();
// Check to make sure we have enough bytes
if(buf.length < (1 + 2 + 4))
doSomeErrorHandling();
int index = 0;
firstByte = (0x000000FF & ((int)buf[index]))
index++;
anUnsignedByte = (short)firstByte;
firstByte = (0x000000FF & ((int)buf[index]))
secondByte = (0x000000FF & ((int)buf[index+1]))
index = index+2;
anUnsignedShort = (char) (firstByte << 8 | secondByte);
firstByte = (0x000000FF & ((int)buf[index]))
secondByte = (0x000000FF & ((int)buf[index+1]))
thirdByte = (0x000000FF & ((int)buf[index+2]))
fourthByte = (0x000000FF & ((int)buf[index+3]))
index = index+4;
anUnsignedInt = ((long) (firstByte << 24
| secondByte << 16
| thirdByte << 8
| fourthByte))
& 0xFFFFFFFFL;
System.out.println(anUnsignedInt ); //打印出无符号类型用long进行正确接收的值
}
分享到:
相关推荐
- Java中没有无符号整数类型,而C语言支持无符号整数类型。 通过以上内容的学习,读者可以对Java语言的基础概念、开发环境配置以及基本语法有一个较为全面的理解。这对于进一步学习和掌握Java编程是非常有帮助的。
在JNI中,Java的基本数据类型如`boolean`, `byte`, `char`, `short`, `int`, `float`, `double`以及`long`都有对应的C/C++类型。例如: - `boolean`映射为`jboolean`,通常是8位整型。 - `byte`映射为`jbyte`,是C/...
基本数据类型包括布尔型(boolean)、字符型(char)、数值类型(如byte、short、int、long、float和double)。每个类型都有其默认值,例如,boolean的默认值为false,整数类型的默认值为0,浮点型的默认值为0.0,...
基本数据类型如图所示,包括整数类型(byte、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean)。 9. **整数类型和常量**:Java中的整数常量默认为`int`类型。如果数值超出`...
- Turbo C 中的 `int` 和 `short int` 都是2字节(16位),有符号的 `int` 范围是 -32768 到 32767,无符号的 `unsigned int` 范围是 0 到 65535。 - `long int` 在 Turbo C 中是4字节(32位)。 - Visual C++ ...
Java提供了几种基本数据类型,包括`byte`、`short`、`int`、`long`等。这些类型有各自的取值范围,如`byte`的最大值是127,最小值是-128。在不同类型之间的转换,大类型能自动接收小类型,但小类型转换为大类型需要...
- 整数类型:`byte`、`short`、`int`、`long`。 - 浮点类型:`float`、`double`。 - 字符类型:`char`。 - 布尔类型:`boolean`。 - **引用类型** 引用类型主要包括: - 类(Class)。 - 接口(Interface)...
- 变量名的规则:由数字、字母、下划线`_`和美元符号`$`组成,但不能以数字开头,也不能使用Java的关键字。 - 遵循驼峰命名法,例如:`userName`,变量名建议使用有意义的单词,通常是名词。 - 声明变量时,先...
- **基本数据类型:** Java 提供了八种基本数据类型:`byte`、`short`、`int`、`long`、`float`、`double`、`char` 和 `boolean`。 #### 三、Java 类的设计与使用 Java 是一门面向对象的语言,类是其核心概念之一...
- 整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节),默认为int型,后缀L用于long类型。 - 浮点型:float(4字节)、double(8字节)。 - 字符型:char(2字节,Unicode编码)。 - 布尔型:...
- **Java**:支持8种基本数据类型,包括四种整数类型(byte、short、int、long)、两种浮点数类型(float、double)、字符类型(char)和布尔类型(boolean)。Java是强类型语言,变量声明需指定类型。 3. **数据...
- 包括`byte`、`short`、`int`、`long`(整数类型)、`float`、`double`(浮点类型)、`char`(字符类型)和`boolean`(布尔类型)。 - 各类型的数据大小、默认值和范围如描述所示。 8. **获取数据类型的最大...
3. **数据类型转换**:在Java中,字符串可以转换为各种数值类型,如`Long.parseLong()`, `Integer.parseInt()`, `Short.parseShort()`, `Byte.parseByte()`, `Double.parseDouble()`和`Float.parseFloat()`。...
例如,`short`变量不能直接接收`int`变量的值,但`int`变量可以接收`short`变量的值。 在表达式运算中,结果的类型通常取决于参与运算的变量中表示范围最大的那个类型。例如,一个`int`和一个`double`相除,结果将...
- 整型:`byte`, `short`, `int`, `long` - 浮点型:`float`, `double` - 字符型:`char` - 布尔型:`boolean` **14. 基本数据类型转换** - **向上转型**:从较小的数据类型自动转换为较大的数据类型。例如,`int i...
- **自动类型提升**:较低类型向较高类型的转换,例如byte->short->int->long->float->double。 - **强制类型转换**:较高类型向较低类型的转换,例如(double)num。 **4.4 控制流** - **if-else**:根据条件执行...
本示例主要关注的是`byte[]`类型与其他基本数据类型(如`long`、`int`、`double`、`float`、`short`、`char`以及`String`)之间的转换。以下是对这些转换方法的详细解释: 1. **`short`到`byte[]`转换**: - `...
- **关键字**:Java的关键字包括但不限于`byte`、`short`、`int`、`long`、`float`、`double`、`char`、`boolean`、`if`、`else`、`switch`、`case`、`default`、`do`、`while`、`for`、`break`、`continue`、`...
- byte -> short -> int -> long -> float -> double -> char -> boolean - void(无返回值) 理解并遵循这些规则和流程,是学习Java编程的基础,也是编写高质量代码的前提。随着对Java的深入学习,你还将接触到类...