C语言里通常可能开发人员直接定义struct 作为数据包,

因此在java客户端接收struct 中的数据时候,受整数等类型的高低位存放的影响,

需要进行相应的转换,

参考:

转换代码如下:

package com.lizongbo.util;

/**

*

*

Title: 数字转换工具类

*

*

Description: 将数字类型与byte数组互相转换

*

*

Copyright: Copyright (c) 2007

*

*

Company: 618119.com

*

* @author lizongbo

* @version 1.0

*/

public class NumberUtil {

/**

* 整数转C++存放格式的字节数组

* @param v int

* @return byte[]

*/

public static byte[] int2Byte4C(int v) {

byte[] b = new byte[4];

//注意,不是java中的顺序的 b[0],b[1],b[2],b[3]

b[3] = (byte) ( (v >>> 24) & 0xFF);

b[2] = (byte) ( (v >>> 16) & 0xFF);

b[1] = (byte) ( (v >>> 8) & 0xFF);

b[0] = (byte) ( (v >>> 0) & 0xFF);

return b;

}

/**

* C++存放格式的数组转整数

* @param b byte[]

* @return int

*/

public static int byte2Int4C(byte[] b) {

return byte2Int(b, 0);

}

/**

* C++存放格式的数组转整数

* @param b byte[]

* @param index int 指定的数组的起始索引位置

* @return int

*/

public static int byte2Int4C(byte[] b, int index) {

//注意,不是java中的顺序的 b[0],b[1],b[2],b[3]

return (b[index + 3] & 0xff) << 24 |

(b[index + 2] & 0xff) << 16 |

(b[index + 1] & 0xff) << 8 |

b[index + 0] & 0xff;

/**

下面这个是错的 ,我被坑了 , 当时照抄 的 java.io.DataInputStream.readInt();

if ((ch1 | ch2 | ch3 | ch4) < 0) {

return 0;

}

return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));

*/

}

/**

* 整数转java存放格式的字节数组

* @param v int

* @return byte[]

*/

public static byte[] int2Byte(int v) {

byte[] b = new byte[4];

b[0] = (byte) ( (v >>> 24) & 0xFF);

b[1] = (byte) ( (v >>> 16) & 0xFF);

b[2] = (byte) ( (v >>> 8) & 0xFF);

b[3] = (byte) ( (v >>> 0) & 0xFF);

return b;

}

/**

* Java存放格式的数组转整数

* @param b byte[]

* @return int

*/

public static int byte2Int(byte[] b) {

return byte2Int(b, 0);

}

/**

* Java存放格式的数组转整数

* @param b byte[]

* @param index int 指定的数组的起始索引位置

* @return int

*/

public static int byte2Int(byte[] b, int index) {

return (b[index + 0] & 0xff) << 24 |

(b[index + 1] & 0xff) << 16 |

(b[index + 2] & 0xff) << 8 |

b[index + 3] & 0xff;

/**

下面这个是错的 ,我被坑了 , 当时照抄 的 java.io.DataInputStream.readInt();

if ((ch1 | ch2 | ch3 | ch4) < 0) {

return 0;

}

return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));

*/

}

public static void main(String[] args) {

for (int i = 40000; i < 40300; i++) {

int r = byte2Int(int2Byte(i));

if (r != i) {

System.out.println(i);

}

}

}

}

java byte 转 c_C 和 Java 之间的byte数据的转换问题相关推荐

  1. CAN光端机解决泰和安TX3016C消防主机长距离联网问题 实现CAN与光纤之间的双向数据智能转换

    火灾报警主机联网问题一直是各消防项目中的难点,特别是管廊等长距离通讯中,如何保证通讯信号长期稳定可靠的运行是需要工程重点解决的问题,而LCAN-FOBR系列环网冗余式CAN光纤转换器提供二路光通道和一 ...

  2. Java shared data_Java多个线程之间处理共享数据的方式

    题目要求: 有4个线程,其中两个线程每次对x加1,另外两个每次对x减1,如何实现? 分析: x就是这4个线程要处理的共享数据,不同种线程有不同的处理方式,但操作的数据是共同的,联想到"窗口买 ...

  3. matlab中关于unit8和double数值类型之间的存储数据和转换问题

    最近写matlab又遇到一个坑,感觉是匪夷所思的bug,简直刷新我的人生观.世界观和价值观[手动笑哭] 想解决的问题很简单,我就是想求一张图片中所有像素点的R.G.B三个颜色分量的平均值,然后我发现, ...

  4. Java初认识--基本数据类型(int 和byte之间赋值)默认值 类型强转

    Java简单介绍 Java面向对象:一个面向对象的木匠关心的制作的椅子:这个木匠干了什么事情 非面向对象的木匠关心的是所使用的工具. 狗吃粮 面向对象 吃狗粮 非面向对象 Java与c++区别: 1. ...

  5. java怎么改变数据类型_java数据类型之间的转换,是怎么回事啊? - 收获啦

    1.数据类型的分类 2.比较数据类型之间的字节大小 1字节=8位 . 3.转换中的知识点 *java中整数类型默认的int类型:小数类型默认的double: *String的字符串转化为char类型时 ...

  6. 字节数组byte[]和整型,浮点型数据的转换——Java代码

    近期在写C++ socket和java socket之间的通信程序,涉及到整数浮点数的传输.须要从字节数组还原数据,查了一些资料.总结例如以下 1.       整数和浮点数的机器表示 在机器内部.不 ...

  7. java与c的交互,java与c/c++之间的数据交互,java交互

    java与c/c++之间的数据交互,java交互 java与c/c++之间的数据交互有这样几种情况:java和c/c++之间基本数据类型的交互,java向c/c++传递对象类型,c/c++向java返 ...

  8. java截取某两个字符之间的字串_Java截取特定两个标记之间的字符串实例

    Java截取特定两个标记之间的字符串实例 如有一串字符串: higklmnopq java代码如下: public class StringTest { public static void main ...

  9. java 嵌套对象转xml_Gson对Java嵌套对象和JSON字符串之间的转换 | 学步园

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...

最新文章

  1. 解密为什么八成IT人士愿意跳槽?
  2. 结对开发——环形一维数组求最大子数组和
  3. 【三维激光扫描】实验02:StonexSiScan新建项目、加载点云数据
  4. php无限极菜单,无限极菜单的实现
  5. mac instantclient_12_2 安装配置
  6. Hanlp的安装和配置
  7. 优化了破网站的搜索功能
  8. 受上海Model S自燃影响?特斯拉市值周一蒸发18亿美元
  9. java 多态性 变量_java – 与实例变量的多态性
  10. Entity Resolution(实体解析)
  11. 1.TCP/IP 详解卷1 --- 概述
  12. 网吧IC卡收费系统常见问题与解决(转)
  13. 矩阵分解 三角分解(LU分解)
  14. python-onvif库基本使用
  15. 新手自己搭建服务器步骤
  16. win10修复计算机选项,为你win10系统设置启动时按F10出现修复计算机选项的技巧...
  17. ant design vue金额校验
  18. android iCloud 短信,云助手 基于安卓的iCloud
  19. XGBoost如何画出树分裂图,用代码绘制多棵CART回归树
  20. Encountered a duplicated sql alias [id] during auto-discovery of a native-sq

热门文章

  1. 完全禁用Microsoft Compatibility Telemetry
  2. SDH光传输设备是什么?SDH设备特点介绍
  3. 光模块的正确安装方法和使用须知
  4. 如何有效维护PDH光端机的常见故障?
  5. [渝粤教育] 广东-国家-开放大学 21秋期末考试招投标与合同管理10217k2 (2)
  6. 【渝粤题库】陕西师范大学210011幼儿园语言教育作业(高起专)
  7. 数学猜想验证步骤_高中数学解题思路与技巧汇总,19种解题方法,实用!
  8. mysql 批量加索引_mysql优化:按期删数据 + 批量insert + 字符串加索引为何很傻
  9. 我的2020(年终总结)
  10. C++中函数概念解析(3)