`
mozhenghua
  • 浏览: 324623 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数值类型与byte[]相互t转换

阅读更多

     在对float类型数据做持久化过程中需要将float转化成byte[] 类型的数据。最简单的办法是将float类型的数据转化成String,然后调用String的getBytes()方法就行了。但是使用这个方式存储的数据占用的磁盘空间更大,一般需要6个字节,而且随着精度越过占用的字节数也越大。

 

     更好的办法是用是先将浮点数转化成int类型,然后将int类型转化成byte[] 数组保存,这样保存的字节长度恒定为4个字节。代码如下:float fvalue= 1.20004f;

byte[] data = byte[4];
int ivalue = Float.floatToIntBits(fvalue);

data[0] = (byte)(ivalue >> 24);
data[1] = (byte)(ivalue >> 16);
data[2] = (byte)(ivalue >>  8);
data[3] = (byte) ivalue;
return data;

   这个操作使用了左移动操作来将int赋值给长度为4的int数组。

 

   如果要将byte[4] 转化为float,可以执行以下操作:

int ivalue = ((data[0] & 0xFF) << 24) | ((data[1] & 0xFF) << 16)
				| ((data[2] & 0xFF) << 8) | (data[3] & 0xFF);

System.out.println(Float.intBitsToFloat(ivalue));

 

long 和byte[]的相互转换:

long -> byte[]:

static byte[] toArray(long val) {
		
		int off = 0;
		byte[] b = new byte[8];
		b[off + 7] = (byte) (val >>> 0);
		b[off + 6] = (byte) (val >>> 8);
		b[off + 5] = (byte) (val >>> 16);
		b[off + 4] = (byte) (val >>> 24);
		b[off + 3] = (byte) (val >>> 32);
		b[off + 2] = (byte) (val >>> 40);
		b[off + 1] = (byte) (val >>> 48);
		b[off + 0] = (byte) (val >>> 56);
		return b;

	}

 byte[]->long

static long toLong(byte[] b) {

		int off = 0;
		return ((b[off + 7] & 0xFFL) << 0) +
	       ((b[off + 6] & 0xFFL) << 8) +
	       ((b[off + 5] & 0xFFL) << 16) +
	       ((b[off + 4] & 0xFFL) << 24) +
	       ((b[off + 3] & 0xFFL) << 32) +
	       ((b[off + 2] & 0xFFL) << 40) +
	       ((b[off + 1] & 0xFFL) << 48) +
	       (((long) b[off + 0]) << 56);
	}

 

分享到:
评论

相关推荐

    在C#中将任意数值类型数据与字节数组相互转换的一个方法及源代码

    using System.IO; …… float f1 = 1.1F MemoryStream s = new MemoryStream(); BinaryWriter w=new BinaryWriter(s );

    单字节 多字节 双字节 相互转换

    宽字符通常用 `wchar_t` 类型表示,在C语言中,可以使用 `wchar_t` 类型来声明宽字符变量。 在实际应用中, Unicode 和宽字符是非常重要的概念,它们提供了一种统一的字符编码方式,能够正确地表示世界上绝大多数...

    编程语言java类型转换.pdf

    在Java中,类型转换是将一种数据类型转换为另一种数据类型的过程。这一过程分为两种类型,...同时,了解引用数据类型的转换规则和特殊情况下的类型转换,比如解析字符串为数值类型,是进行Java开发时必须要掌握的技能。

    VC++类型转换详解

    - **CString与数学类型转化**:可以使用`Format()`函数将数值格式化为字符串,使用`ATOL()`, `ATOI()`, `ATOF()`等函数将CString转换回数值类型。 - **CString与char\*转换**:使用`GetBuffer()`获取内部缓冲区,...

    CString-与其他类型的转换.pdf

    `CString`与数学类型相互转换** - `_ttoi(CString-&gt;int)`:这个函数用于将`CString`对象转换为整型数值。例如,如果你有一个包含数字的`CString`,你可以使用`_ttoi`来获取其对应的整数值。 - `_tstof(CString-&gt;...

    VC常用数据类型列表.doc

    2. 数学类型与CString的转换:如何将数值类型转换为CString,反之亦然。 3. CString与char*的转换示例:例如使用ATL或MFC的字符串函数进行转换。 4. CString与BSTR型转换:如何在两个Unicode字符串类型间转换。 5. ...

    Visual C++开发经验技巧宝典(第2章)

    0089 _variant_t与字符串类型的转换 38 0090 ColeVariant与其他数据类型的转换 38 0091 格式化类型 39 2.2 类型转换 39 0092 CString和char*之间的转换 39 0093 char与char*类型应用 39 0094 COLORREF...

    VC数据类型详解

    1. **数学类型变量与字符串相互转换**:通过`itoa`、`wcstombs`、`_wtoi`等函数实现整数与字符串间的转换。 2. **`CString`, `string`, `char*`与其他数据类型的转换和操作**: - 综合比较:`CString`是MFC中的字符...

    VC++常用数据类型.pdf

    2.1 数学类型与字符串相互转换: - 数学类型可以通过格式化输出或输入函数转换为字符串,反之亦然。 - `CString`可以使用`Format`函数将数字转换为字符串,而`ATOF`函数则用于将字符串转换为浮点数。 2.2 CString...

    VC++常用数据类型及其操作详解.pdf

    - `CString`可以与`string`、`char*`以及`BSTR`相互转换。 - `CString`与`BSTR`之间的转换可以通过`SysAllocString`和`SysFreeString`进行。 - `CString`与`VARIANT`之间的转换需要使用COM相关的API,如`VARIANT:...

    javaee基础程序设计

    - **自动类型提升**:从低精度类型向高精度类型转换,如`byte` -&gt; `short` -&gt; `int` -&gt; `long` -&gt; `float` -&gt; `double`。 - **强制类型转换**:从高精度类型向低精度类型转换,如`double` -&gt; `int`。这种转换可能会...

    Java基本数据类型.pdf

    与C语言不同,`boolean`在Java中不是数值类型,不能与其他类型相互转换。布尔类型的变量必须使用`boolean`关键字来声明,例如:`boolean truth = true;`它们常用于条件判断语句。 二、文本类:`char`和`String` 1. ...

    Java基本数据类型[参考].pdf

    在Java中,boolean类型非常特殊,它不是数值类型,不能与其他类型相互转换。布尔值主要用于条件判断语句,例如if语句。 文本类包括char和String。char类型用于表示单个字符,它是一个16位的无符号Unicode字符,可以...

    Java 基本语法

    #### 三、数据类型的自动转换与显式转换 在Java中,不同类型的数据之间可以相互转换。当参与运算的变量类型不一致时,会自动进行类型转换,具体规则如下: 1. 如果其中一个操作数为`double`类型,则所有操作数都将...

    JavaSE.md

    Java中不同类型之间的数据可以相互转换: - **自动类型转换**:当进行赋值或运算时,精度较小的数据类型会自动转换为精度较大的数据类型。 - **转换规则**:`char 。 - **注意事项**: - 当多个数据类型参与运算时...

    TwinCAT用户指令手册

    - **描述**: 包括所有整型数据类型之间的相互转换。 **2.4 REAL_TO-/LREAL_TO–转换** - **描述**: 将浮点数类型转换为其他类型。 **2.5 TIME_TO-/TIME_OF_DAY–转换** - **描述**: 将时间类型转换为其他类型。 ...

    kotlin笔记1

    Kotlin 提供了丰富的类型转换函数,使得不同类型的数值之间可以相互转换: - **toByte()**: 将数值转换为 `Byte` 类型。 - **toShort()**: 将数值转换为 `Short` 类型。 - **toInt()**: 将数值转换为 `Int` 类型。 -...

    专业_XXXX年二级C语言知识点大盘点_经典.docx

    5. **二进制与十进制转换**:掌握二进制与十进制之间的相互转换方法。 ### 二、基本概念 1. **编译预处理**:不属于C语言本身,通常用于宏定义、文件包含等,不参与运行时操作。 2. **主函数**:每个C程序中至少...

    2022年计算机二级考试考点C语言的几大考点介绍.docx

    字符可以通过ASCII码与整数相互转换,如'0'对应的ASCII数值是48,'a'是97,'A'是65。字符可以参与算术运算,大小写字母间可通过加减32进行转换。 9. **整型数据**:整型数据通常占用两个字节,字符型占用一个字节,...

Global site tag (gtag.js) - Google Analytics