`

java 接收无符号类型的(Long、int、short)

阅读更多
最近在做一个项目,需要和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语言快速入门习题与答案

    - Java中没有无符号整数类型,而C语言支持无符号整数类型。 通过以上内容的学习,读者可以对Java语言的基础概念、开发环境配置以及基本语法有一个较为全面的理解。这对于进一步学习和掌握Java编程是非常有帮助的。

    Jni中C++和Java的参数传递

    在JNI中,Java的基本数据类型如`boolean`, `byte`, `char`, `short`, `int`, `float`, `double`以及`long`都有对应的C/C++类型。例如: - `boolean`映射为`jboolean`,通常是8位整型。 - `byte`映射为`jbyte`,是C/...

    完整版精品java课件 Java基础入门教程 Java程序设计 第2章 java语言基础(共31页).ppt

    基本数据类型包括布尔型(boolean)、字符型(char)、数值类型(如byte、short、int、long、float和double)。每个类型都有其默认值,例如,boolean的默认值为false,整数类型的默认值为0,浮点型的默认值为0.0,...

    java知识总结

    基本数据类型如图所示,包括整数类型(byte、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean)。 9. **整数类型和常量**:Java中的整数常量默认为`int`类型。如果数值超出`...

    C/C++与Java各数据类型所占字节数的详细比较

    - Turbo C 中的 `int` 和 `short int` 都是2字节(16位),有符号的 `int` 范围是 -32768 到 32767,无符号的 `unsigned int` 范围是 0 到 65535。 - `long int` 在 Turbo C 中是4字节(32位)。 - Visual C++ ...

    我的java笔记

    Java提供了几种基本数据类型,包括`byte`、`short`、`int`、`long`等。这些类型有各自的取值范围,如`byte`的最大值是127,最小值是-128。在不同类型之间的转换,大类型能自动接收小类型,但小类型转换为大类型需要...

    详细的java基础总结

    - 整数类型:`byte`、`short`、`int`、`long`。 - 浮点类型:`float`、`double`。 - 字符类型:`char`。 - 布尔类型:`boolean`。 - **引用类型** 引用类型主要包括: - 类(Class)。 - 接口(Interface)...

    使用java理解程序逻辑【第一学年-第一学期】.doc

    - 变量名的规则:由数字、字母、下划线`_`和美元符号`$`组成,但不能以数字开头,也不能使用Java的关键字。 - 遵循驼峰命名法,例如:`userName`,变量名建议使用有意义的单词,通常是名词。 - 声明变量时,先...

    Java 语言程序设计基础

    - **基本数据类型:** Java 提供了八种基本数据类型:`byte`、`short`、`int`、`long`、`float`、`double`、`char` 和 `boolean`。 #### 三、Java 类的设计与使用 Java 是一门面向对象的语言,类是其核心概念之一...

    Java基础知识.docx

    - 整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节),默认为int型,后缀L用于long类型。 - 浮点型:float(4字节)、double(8字节)。 - 字符型:char(2字节,Unicode编码)。 - 布尔型:...

    Java第二十二——二十五讲总结-基础.doc

    - **Java**:支持8种基本数据类型,包括四种整数类型(byte、short、int、long)、两种浮点数类型(float、double)、字符类型(char)和布尔类型(boolean)。Java是强类型语言,变量声明需指定类型。 3. **数据...

    java基础题

    - 包括`byte`、`short`、`int`、`long`(整数类型)、`float`、`double`(浮点类型)、`char`(字符类型)和`boolean`(布尔类型)。 - 各类型的数据大小、默认值和范围如描述所示。 8. **获取数据类型的最大...

    JAVA编程基础__实例

    3. **数据类型转换**:在Java中,字符串可以转换为各种数值类型,如`Long.parseLong()`, `Integer.parseInt()`, `Short.parseShort()`, `Byte.parseByte()`, `Double.parseDouble()`和`Float.parseFloat()`。...

    Javase1[参考].pdf

    例如,`short`变量不能直接接收`int`变量的值,但`int`变量可以接收`short`变量的值。 在表达式运算中,结果的类型通常取决于参与运算的变量中表示范围最大的那个类型。例如,一个`int`和一个`double`相除,结果将...

    java初级知识

    - 整型:`byte`, `short`, `int`, `long` - 浮点型:`float`, `double` - 字符型:`char` - 布尔型:`boolean` **14. 基本数据类型转换** - **向上转型**:从较小的数据类型自动转换为较大的数据类型。例如,`int i...

    Java入门学习笔记

    - **自动类型提升**:较低类型向较高类型的转换,例如byte-&gt;short-&gt;int-&gt;long-&gt;float-&gt;double。 - **强制类型转换**:较高类型向较低类型的转换,例如(double)num。 **4.4 控制流** - **if-else**:根据条件执行...

    Java 基础 byte[]与各种数据类型互相转换的简单示例

    本示例主要关注的是`byte[]`类型与其他基本数据类型(如`long`、`int`、`double`、`float`、`short`、`char`以及`String`)之间的转换。以下是对这些转换方法的详细解释: 1. **`short`到`byte[]`转换**: - `...

    JAVA入门神器.pdf

    - **关键字**:Java的关键字包括但不限于`byte`、`short`、`int`、`long`、`float`、`double`、`char`、`boolean`、`if`、`else`、`switch`、`case`、`default`、`do`、`while`、`for`、`break`、`continue`、`...

    初学者java基础总结

    - byte -&gt; short -&gt; int -&gt; long -&gt; float -&gt; double -&gt; char -&gt; boolean - void(无返回值) 理解并遵循这些规则和流程,是学习Java编程的基础,也是编写高质量代码的前提。随着对Java的深入学习,你还将接触到类...

Global site tag (gtag.js) - Google Analytics