`
javaG
  • 浏览: 554597 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

c与java通信时数值类型存储的顺序问题

    博客分类:
  • java
阅读更多

Byte:一个字节,标记为byte 0
Word:二个字节,从byte 0到byte 1
Long : 四个字节,从byte 0到byte 3
每个byte由8个位(bit)组成,从bit 7 到 bit 0 (从左往右)。
每个word由16个 bit 组成,从bit 15 到 bit 0 (从左往右)。
每个long由32个 bit 组成,从bit 31 到 bit 0 (从左往右)。
通常来说左边是高位,右边是低位。

     long length = 4294967294L;

     char hexDigits[] = { '0', '1', '2', '3', '4',
                         '5', '6', '7', '8', '9',
                         'A', 'B', 'C', 'D', 'E', 'F' };

//从输出结果可以看出,long的存储结果是高位放在左边低位放在右边

     char[] longToChars(long length) {//这个函数只取long的右32位,即从左往右数的第32位一直读到最后
            int start =32;
            int position;
            char[] chars = new char[8];
            System.out.println("parameter:"+length);
            for(int i=0;i<8;i++){
                position =(int)((length>>> ( start-(i+1)*4 ) )& 0x000000000000000f);
                chars[i]=hexDigits[position];
            }            System.out.println(new String(chars));//输出的顺序也是从坐往右,依次输出byte对应的16进制字符
            return chars;
    }

longToChars(4294967294L);//输出结果FFFFFFFE
longToChars(65535L);//输出结果0000FFFF
longToChars(31L);//输出结果0000001F

 

最近一个项目中c/c++代码和java代码通信,c那边用的是UINT类型,穿过来时4个字节,在这边java要把这4个字节转换成数值。这里就出现了一个java和c数值类型存储顺序不同的问题了。

从微观上来看,也就是从单个byte来看,在c中和在java中存放的顺序是一样的,例如31在c中表示为0x1F(从左往右输出表示),在java中也是如此。但是如果从宏观,也就是每个byte之间的顺序,java和c就大不一样了。从宏观来说java也是高高低低,高位放左边低位放右边,但是c中刚好相反。

如果在c中,31L的16进制从左往右输出结果是1F00000000000000,java中是000000000000001F。

分享到:
评论

相关推荐

    Java面经.适用于校招

    - 基本类型存储的是数据本身,而引用类型存储的是对象的内存地址。 1.2 重写、重载、封装、继承和多态 - 重写(Override)是子类对父类方法的重新定义。 - 重载(Overload)是在同一个类中定义多个同名方法,但参数类型...

    Java程序设计基础.rar

    - **基本数据类型**:分为数值类型(整型、浮点型)、字符型和布尔型。 - **引用数据类型**:包括类、接口和数组,它们都是对象的引用。 7. **类与对象**: - **类**:Java中的蓝图,定义了数据(属性)和行为...

    Java复习题

    计算机硬件组成包括中央处理器(CPU)、内存、存储设备、输入输出设备、通信设备。CPU 的速度单位是赫兹,衡量内存大小的单位是 KB、MB、GB。 内存用于存储程序及程序所需要的数据,RAM 表示随机存储器,内存可以...

    java核心技术 卷一(第9版).pdf

    泛型是Java SE 5引入的一个特性,允许在编译时提供类型检查和消除类型转换。泛型使得集合框架可以用于存储任意类型对象,并且保持类型安全。 9. 多线程 Java通过内置的多线程支持,使得开发者可以编写并行执行的...

    8583 顺序栈的基本操作.zip_8583顺序栈_数据结构

    8583顺序栈是一种基于数据结构理论的特殊栈,主要应用于金融交易系统中的报文解析,特别是银行间通信协议ISO 8583。在这个数据结构中,“8583”代表的是一个特定的标准,而“顺序栈”则指的是栈这种数据结构的一种...

    Java语言实用教程课件

    - **变量与数据类型**: Java提供了基本数据类型(如int、float、char)和引用数据类型(如类、接口和数组)。变量是用来存储数据的容器,声明时需指定其类型。 - **运算符与表达式**: 包括算术运算符、比较运算符...

    java基础的所有练习题.rar

    这个压缩包“java基础的所有练习题.rar”显然包含了一系列与Java基础知识相关的练习题目,旨在帮助学习者巩固和提升Java编程技能。以下是根据这个主题可能会涵盖的一些Java基础知识点的详细解释: 1. **数据类型**...

    java初学者必看

    3.6.1 数值类型之间的转换 3.6.2 强制类型转换 3.7 运算符 3.7.1 算术运算符 3.7.2 关系运算符 3.7.3 逻辑运算符 3.7.4 位运算符 3.7.5 自动递增和递减 3.7.6 三元运算符 3.7.7 运算符的优先级 3.8 本章...

    Java 60道面试题和答案.docx

    - Java中,数值类型默认为0,boolean为false,char为'\u0000',对象为null。 17. **Java常用包**: - `java.lang`包含基础类,如String和Object。 - `java.io`用于输入输出操作。 - `java.sql`用于数据库交互。...

    Java 基础核心总结-副本

    变量是程序中的存储单元,可以存储各种数据类型,如整型(int)、浮点型(float/double)、字符型(char)和布尔型(boolean)。运算符则包括算术运算符、比较运算符和逻辑运算符,用于进行数值计算和逻辑判断。流程控制语句...

    Accp6.0 S1 JAVA 理解程序逻辑 第12章

    2. **变量与数据类型**:在Java中,变量是用来存储数据的容器,有基本数据类型(如整型、浮点型、字符型和布尔型)和引用数据类型(类、接口、数组)。了解并熟练使用这些数据类型是编写程序的基础。 3. **运算符与...

    2018阿里Java面试题70道

    35. **Java数据类型**:分为基本类型和引用类型,基本类型包括数值型、布尔型和字符型,引用类型包括类、接口和数组。 36. **栈与堆**:栈存储局部变量和方法调用信息,堆存储对象实例。 37. **堆栈区分**:堆提供...

    Java面试.doc

    `==`在比较基本类型时,比较的是数值是否相等;在比较引用类型时,比较的是对象的引用是否指向同一块内存。`equals()`方法在默认情况下与`==`相同,但许多类(如String和Integer)重写了该方法以进行值比较。例如:...

    java 讲师笔记

    2.2 八种基本数据类型:Java中的八种基本数据类型包括四种整数类型(byte、short、int、long)、两种浮点类型(float、double)、char和boolean。 2.3 常量和变量:常量是程序运行过程中其值不可改变的量,而变量是...

    ACCP自学使用Java理解程序逻辑

    理解这个过程有助于解决编译错误和运行时问题。 在“S1-1-使用Java理解程序逻辑”的压缩包中,可能包含了相关的代码示例、课件、练习题和解答,这些资源将帮助学习者通过实践来加深对上述知识点的理解。通过ACCP...

    125条常见的java面试笔试题大汇总

    - **知识点概述**:Java提供了八种基本数据类型及其对应的包装类,包括数值类型、字符类型和布尔类型。 - **详细解释**:基本数据类型如`int`、`float`等直接存储值,而包装类如`Integer`、`Float`等则存储对象,...

    最新Java面试题

    - `==`:用于比较基本类型数值或引用类型地址。 - `equals`:用于比较对象的内容是否相等,通常用于自定义对象之间。 - **多态的技能点**:多态的前提条件是继承或实现接口,向上转型是指将子类对象赋值给父类引用...

    2022面试题4java背诵版本.doc

    以下是一些2022年面试中常见的Java相关问题的详细解答: 1. **Kafka是什么?主要应用场景有哪些?** Kafka是一个高吞吐量的分布式消息系统,用于实时数据流处理和大数据的存储。它常用于日志聚合、用户行为追踪、...

    文章分类:Java编程,java面试题2

    `Number` 类在 `java.lang` 包中,但它并不是一个具体的数值类型,而是一个抽象类,用于表示数值类型的公共父类。 3. **`java.lang.Double` (F):** 错误。`Double` 类在 `java.lang` 包中,它是一个封装类,用于...

Global site tag (gtag.js) - Google Analytics