在编写网络通信的时候通常会指定一个报头来说明C/S端数据的协议和内容体的长度,内容长度在java代码里面通常表现为一个int类型或是long类型,但是在将int或long弄写到通信管道的却需要将其转成字节数组。公司有人这样写:
String length = String.valueOf(request.getData().length); while (length.length() < 4) { length = "0" + length; } byte[] header=length.getBytes();
简直无法直视对吧,因看不惯这样的代码,本人决定写一个工具类来处理这些基础类型到byte数组的互换。下面贴上代码:
public static byte[] toBytes(int n) { byte[] bytes = new byte[4]; for (int i = 0; i < bytes.length; i++) { bytes[i] = (byte) ((n >> (i << 3)) & 0xFF); } return bytes; } public static byte[] toBytes(long n) { byte[] bytes = new byte[8]; for (int i = 0; i < bytes.length; i++) { bytes[i] = (byte) ((n >> (i << 3)) & 0xFF); } return bytes; } public static int toInt(byte[] bytes) { int n = 0; for (int i = 0; i < bytes.length; i++) { n = n | ((bytes[i] & 0xff) << (i << 3)); } return n; } public static long toLong(byte[] bytes) { long n = 0; for (int i = 0; i < bytes.length; i++) { n = n | ((bytes[i] & 0xffL) << (i << 3)); } return n; } public static byte[] toBytes(short n){ byte[] bytes=new byte[2]; for (int i = 0; i < bytes.length; i++) { bytes[i] = (byte) ((n >> (i << 3)) & 0xFF); } return bytes; } public static byte[] toByte(char c){ return toBytes((short)c); } public static short toShort(byte[] bytes){ short n = 0; for (int i = 0; i < bytes.length; i++) { n = (short) (n | ((bytes[i] & 0xff) << (i << 3))); } return n; } public static char toChar(byte[] bytes){ return (char)toShort(bytes); }
相信在大学里面好好学过C的人都能看懂这代码的意思,我就不作太多解释了 ^_^ 。
1个字节有8bit ,0xFF表示一个8位全1的字节,如果将其与一个int型数进行&运算则能取出此int的第1个字节。如果将0xff左移8位再与此int进行&运算则能取出它的第2个字节,依此类推. 从byte数组到int则是一个逆向的“或”(运算符“|” )过程。
相关推荐
Java 中的基本类型与 byte 数组之间的转换是非常重要的,以下是关于 Java 基本类型与 byte 数组互相转换的相关知识点: 1. short 类型转换成 byte 数组 在 Java 中,short 类型是 16 位的整数类型,而 byte 数组是...
ip地址转4字节byte,char转2字节byte,byte数组转char,int整数转换为4字节的byte数组,byte数组转换为int整数,double类型转8字节数组,8位数组转double,long整数转换为8字节的byte数组,short整数转换为2字节的...
C语言有五种基本数据类型:int、float、double、char、void和enum。其中,int是用于定义整数的,float和double是用于定义浮点数的,char是用于定义字符的,void是用于定义无类型的指针,enum是用于定义枚举类型的。 ...
在Java编程语言中,数据类型分为两种:基本类型(primitive types)和引用类型(reference types)。基本类型包括整型(如int、short、byte、long)、浮点型(如float、double)、字符型(char)以及布尔型(boolean...
装箱就是自动将基本数据类型转换为包装器类型(int-->Integer);调用方法:Integer的valueOf(int) 方法。 拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int)。调用方法:Integer的intValue方法。 在...
Java是一种强类型编程语言,它的数据类型分为两大类:简单数据类型(基本数据类型)和引用数据类型。本文主要探讨的是Java的五种简单数据类型,包括它们的初始化、封装类以及相关的特性。 1. 简单数据类型初始化: ...
C语言中的数据类型主要包括基本数据类型、复合数据类型等。这些类型的选择直接影响到程序的效率和可靠性。 ##### 2.1 什么是变量与常量? - **变量**:在计算机内存中,变量是能够被频繁修改的数据。变量需要在...
在C#中,类型转换是一项非常重要的功能,它允许我们在不同数据类型之间进行灵活的变换。本文将深入探讨C#中的类型转换,包括装箱与拆箱、数值类型间的转换、字符编码、字符串与数值之间的转换等多种类型转换方式。 ...
Java中有八种基本数据类型,分为两类:整数类型(byte、short、int、long)和浮点类型(float、double),此外还包括布尔类型(boolean)和字符类型(char)。而`String`不是基本数据类型,它是Java中的一个类,用来...
本文深入探讨了C++中的三种基本数据类型:整型、字符型和浮点型。这些数据类型是编程中最常用的基础类型,理解和掌握它们对于编写高效的C++程序至关重要。 #### 一、整型 1. **基本概念**: - **整型**(Integer ...
Java.lang包是Java标准库中最基本也是最核心的包之一,包含了所有Java编程语言的基本类,例如:`String`、`Math`、基本数据类型的包装类等。这些类在开发过程中被广泛使用。 ##### 包装类 包装类是用于封装基本...
- Java有八种基本数据类型,包括`byte`、`short`、`int`、`long`、`float`、`double`、`char`和`boolean`。 - 对应这些基本类型,Java提供了八个包装类:`Byte`、`Short`、`Integer`、`Long`、`Float`、`Double`、...
4. 基本数据类型(Primitive Data Types): - `boolean`表示逻辑值,`true`或`false`。 - `char`存储16位Unicode字符,同时具有字符和整数特性。 - `byte`, `short`, `int`, `long`代表不同大小的整数,分别对应...
- AIDL 支持基本数据类型如 `int`, `String` 等。 - 支持自定义类型,但需要通过 `parcelable` 或 `serializable` 实现序列化。 - 不支持泛型。 #### 九、View与SurfaceView的选择 1. **游戏开发中的选择:** ...
- `DataOutputStream`:用于写入Java基本数据类型。 - **转换流** - `InputStreamReader`:将字节流转换为字符流。 - `OutputStreamWriter`:将字符流转换为字节流。 - **管道流** - `PipedInputStream`:用于从...
22. **基本数据类型与引用类型**:基本数据类型包括byte、short、int、long、float、double、char和boolean,引用类型是对象的引用。 23. **String类API**:`length()`、`charAt()`、`substring()`、`indexOf()`和`...
在C#.NET编程中,字符转换是一个非常基础且重要的概念,尤其对于处理数据类型转换的开发者来说。本文将深入探讨C#中字符转换的各种方法,包括装箱/拆箱、别名、数值类型间的转换、字符编码(ASCII与Unicode)、字符...
这个程序展示了C语言中各种基本数据类型的大小,让学生了解不同类型的内存需求。 三、运算符和表达式 实验还涵盖了运算符的使用,特别是算术运算符和赋值运算符。例如: ```c main() { int i, j, m, n; i = 8; ...