- 浏览: 1149116 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
Java与其他语言数据类型之间的转换方法实例程序
/***
* 通信格式转换** Java和一些windows编程语言如c、c++、Delphi所写的网络程序进行通讯时,需要进行相应的转换* 高、低字
*
* 节之间的转换* windows的字节序为低字节开头温馨提示:您正在浏览的是 Java与其他语言数据类型之间的转换方法 的内容,您可
*
* 以在下面的搜索框中搜索到更多关于 Java与其他语言数据类型之间的转换方法 的文章。
*
* Java与其他语言数据类型之间的转换方法实例程序
*
* /*** 通信格式转换** Java和一些windows编程语言如c、c++、Delphi所写的网络程序进行通讯时,需要进行相应的转换* 高、低字
*
* 节之间的转换* windows的字节序为低字节开头* Linux,unix的字节序为高字节开头* java则无论平台变化,都是高字节开头
*/
public class FormatTransfer {
/**
* * 将int转为低字节在前,高字节在后的byte数组 * @param n int * @return byte[]
*/
public static byte[] toLH(int n) {
byte[] b = new byte[4];
b[0] = (byte) (n & 0xff);
b[1] = (byte) (n >> 8 &
0xff);
b[2] = (byte) (n >> 16 & 0xff);
b[3] = (byte) (n >> 24 & 0xff);
return b;
}
/** * 将int转为高字节在前,低字节在后的byte数组 * @param n int * @return byte[] */
public static byte[] toHH(int
n) {
byte[] b = new byte[4];
b[3] = (byte) (n & 0xff);
b[2] = (byte) (n >> 8 & 0xff);
b[1] = (byte) (n >> 16 &
0xff);
b[0] = (byte) (n >> 24 & 0xff);
return b;
}
/** * 将short转为低字节在前,高字节在后的byte数组 * @param n short * @return byte[] */
public static byte[] toLH
(short n) {
byte[] b = new byte[2];
b[0] = (byte) (n & 0xff);
b[1] = (byte) (n >> 8 & 0xff);
return b;
}
/** * 将short转为高字节在前,低字节在后的byte数组 * @param n short * @return byte[] */
public static byte[] toHH
(short n) {
byte[] b = new byte[2];
b[1] = (byte) (n & 0xff);
b[0] = (byte) (n >> 8 & 0xff);
return b;
}
/**
* * 将将int转为高字节在前,低字节在后的byte数组 public static byte[] toHH(int number) { int
* temp = number; byte[] b = new byte[4]; for (int i = b.length - 1; i >
*
* -1; i--) { b = new Integer(temp & 0xff).byteValue(); temp = temp >> 8; }
* return b;} public static byte[] IntToByteArray(int i) { byte[] abyte0 =
* new byte[4]; abyte0[3] = (byte) (0xff & i);
*
* abyte0[2] = (byte) ((0xff00 & i) >> 8); abyte0[1] = (byte) ((0xff0000 &
* i) >> 16); abyte0[0] = (byte)
*
* ((0xff000000 & i) >> 24); return abyte0;}
*/
/** * 将float转为低字节在前,高字节在后的byte数组 */
public static byte[] toLH(float f) {
return toLH(Float.floatToRawIntBits(f));
}
/** * 将float转为高字节在前,低字节在后的byte数组 */
public static byte[] toHH(float f) {
return toHH
(Float.floatToRawIntBits(f));
}
/** * 将String转为byte数组 */
public static byte[] stringToBytes(String s, int length) {
while (s.getBytes
().length < length) {
s += " ";
}
return s.getBytes();
}
/** * 将字节数组转换为String * @param b byte[] * @return String */
public static String bytesToString(byte[] b) {
StringBuffer result = new StringBuffer("");
int length = b.length;
for (int i = 0; i < length; i++) {
result.append((char) (b & 0xff));
}
return result.toString();
}
/** * 将字符串转换为byte数组 * @param s String * @return byte[] */
public static byte[] stringToBytes(String s) {
return s.getBytes();
}
/** * 将高字节数组转换为int * @param b byte[] * @return int */
public static int hBytesToInt(byte[] b) {
int s =
0;
for (int i = 0; i < 3; i++) {
if (b >= 0) {
s = s + b;
} else {
s = s + 256 + b;
}
s = s *
256;
}
if (b[3] >= 0) {
s = s + b[3];
} else {
s = s + 256 + b[3];
}
return s;
}
/** * 将低字节数组转换为int * @param b byte[] * @return int */
public static int lBytesToInt(byte[] b) {
int s =
0;
for (int i = 0; i < 3; i++) {
if (b[3 - i] >= 0) {
s = s + b[3 - i];
} else {
s = s + 256 + b[3 - i];
}
s = s * 256;
}
if (b[0] >= 0) {
s = s + b[0];
} else {
s = s + 256 + b[0];
}
return s;
}
/** * 高字节数组到short的转换 * @param b byte[] * @return short */
public static short hBytesToShort(byte[] b) {
int s = 0;
if (b[0] >= 0) {
s = s + b[0];
} else {
s = s + 256 + b[0];
}
s = s * 256;
if (b[1] >=
0) {
s = s + b[1];
} else {
s = s + 256 + b[1];
}
short result = (short) s;
return result;
}
/** * 低字节数组到short的转换 * @param b byte[] * @return short */
public static short lBytesToShort(byte[] b) {
int s = 0;
if (b[1] >= 0) {
s = s + b[1];
} else {
s = s + 256 + b[1];
}
s = s * 256;
if (b[0] >= 0) {
s =
s + b[0];
} else {
s = s + 256 + b[0];
}
short result = (short) s;
return result;
}
/** * 高字节数组转换为float * @param b byte[] * @return float */
public static float hBytesToFloat(byte[] b) {
int i = 0; Float F = new Float(0.0); i = ((((b[0]&0xff)<<8 (b[1]&0xff))<<8) (b[2]&0xff))<<8 (b[3]&0xff); return
F.intBitsToFloat(i);}
/** * 低字节数组转换为float * @param b byte[] * @return float */
public static float lBytesToFloat(byte[] b) {
int i = 0; Float F = new Float(0.0); i = ((((b[3]&0xff)<<8 (b[2]&0xff))<<8) (b[1]&0xff))<<8 (b[0]&0xff); return
F.intBitsToFloat(i);}
/** * 将byte数组中的元素倒序排列 */
public static byte[] bytesReverseOrder(byte[] b) {
int length = b.length;
byte[] result = new byte[length];
for (int i = 0; i < length; i++) {
result[length - i - 1] = b;
}
return result;
}
/** * 打印byte数组 */
public static void printBytes(byte[] bb) {
int length = bb.length;
for (int i = 0; i < length;
i++) {
System.out.print(bb + " ");
}
System.out.println("");
}
public static void logBytes(byte[] bb) {
int length = bb.length;
String out = "";
for (int i = 0; i < length; i++) {
out = out + bb + " ";
}
}
/** * 将int类型的值转换为字节序颠倒过来对应的int值 * @param i int * @return int */
public static int reverseInt
(int i) {
int result = FormatTransfer.hBytesToInt(FormatTransfer.toLH(i));
return result;
}
/** * 将short类型的值转换为字节序颠倒过来对应的short值 * @param s short * @return short */
public static short
reverseShort(short s) {
short result = FormatTransfer.hBytesToShort(FormatTransfer.toLH(s));
return result;
}
/** * 将float类型的值转换为字节序颠倒过来对应的float值 * @param f float * @return float */
public static float
reverseFloat(float f) {
float result = FormatTransfer.hBytesToFloat(FormatTransfer.toLH(f));
return result;
}
}
在剖析该问题前请看如下代码
public static String bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[ i ] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}
上面是将byte[]转化十六进制的字符串,注意这里b[ i ] & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出
b[ i ] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不行吗?答案是不行的.
其原因在于:
1.byte的大小为8bits而int的大小为32bits
2.java的二进制采用的是补码形式
在这里先温习下计算机基础理论
byte是一个字节保存的,有8个位,即8个0、1。
8位的第一个位是符号位,
也就是说0000 0001代表的是数字1
1000 0000代表的就是-1
所以正数最大位0111 1111,也就是数字127
负数最大为1111 1111,也就是数字-128
上面说的是二进制原码,但是在java中采用的是补码的形式,下面介绍下什么是补码
1、反码:
一个数如果是正,则它的反码与原码相同;
一个数如果是负,则符号位为1,其余各位是对原码取反;
2、补码:利用溢出,我们可以将减法变成加法
对于十进制数,从9得到5可用减法:
9-4=5 因为4+6=10,我们可以将6作为4的补数
改写为加法:
9+6=15(去掉高位1,也就是减10)得到5.
对于十六进制数,从c到5可用减法:
c-7=5 因为7+9=16 将9作为7的补数
改写为加法:
c+9=15(去掉高位1,也就是减16)得到5.
在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为(100000000),进位1被丢弃。
⑴一个数为正,则它的原码、反码、补码相同
⑵一个数为负,刚符号位为1,其余各位是对原码取反,然后整个数加1
- 1的原码为 10000001
- 1的反码为 11111110
+ 1
- 1的补码为 11111111
0的原码为 00000000
0的反码为 11111111(正零和负零的反码相同)
+1
0的补码为 100000000(舍掉打头的1,正零和负零的补码相同)
Integer.toHexString的参数是int,如果不进行&0xff,那么当一个byte会转换成int时,由于int是32位,而byte只有8位这时会进行补位,
例如补码11111111的十进制数为-1转换为int时变为11111111111111111111111111111111好多1啊,呵呵!即0xffffffff但是这个数是不对的,这种补位就会造成误差。
和0xff相与后,高24比特就会被清0了,结果就对了。
----
Java中的一个byte,其范围是-128~127的,而Integer.toHexString的参数本来是int,如果不进行&0xff,那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),会被转换成int的-1(即0xffffffff),那么转化出的结果就不是我们想要的了。
而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,结果中的高的24个比特就总会被清0,于是结果总是我们想要的。
发表评论
-
一个例子全部说明java泛型中的K,V,T,E,?,object的意思及其用法
2013-03-07 11:09 70491.意思 jdk中的K,V,T,E等泛型名称很多人以为 ... -
Log4j 把不同包的日志打印到不同位置
2012-11-29 08:23 1150需要的包和测试的代码下载附件! 如果需要将不同的日 ... -
Java多线程发展简史
2012-09-16 14:25 1035转自:http://www.raychase.ne ... -
Java编码易疏忽的十个问题
2012-09-06 08:52 913在Java编码中,我们容易 ... -
网络编程
2012-09-04 13:30 970计算机网络基础 什么是计算机网络 把分布在 ... -
获取Java程序运行的路径 | 获取当前jar包的路径
2012-09-04 11:55 14079经过试验,不管是否是 Jar 包,不管是否是 Tom ... -
java的concurrent用法详解
2012-08-03 11:28 1019我们都知道,在JDK1.5之前,Java中要进行业务并发时 ... -
Java程序员必知的8大排序
2012-07-05 09:56 10278 种排序之间的关系: ... -
Comparator与Comparable的区别
2012-07-05 08:38 1219当需要排序的集合或数组不是单纯的数字类型的时候,通常可以使用C ... -
RSA算法Java实现
2012-06-27 08:22 1416Java代码 package c ... -
队列阻塞浅析
2012-06-17 18:10 931这几天所做的项目中涉及到了队列阻塞机制,通过研究整理如下 ... -
Java面试过程中会遇到的问题
2012-06-13 13:04 11441、abstract的method是否可同时是static,是 ... -
【解惑】深入jar包:从jar包中读取资源文件
2012-06-13 13:02 1100我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。 ... -
java 处理文件路径中的空格
2012-06-13 12:57 1538问题背景: windows下有个目录名称Program ... -
java内存分配机制
2012-06-13 12:52 1172通过这几天对一个 ... -
java中byte转换int时为何与0xff进行与运算
2012-05-14 16:39 1071java中byte转换int时为何 ... -
java整型数与网络字节序的 byte[] 数组转换关系
2012-05-14 16:31 6459工作项目需要在 java 和 c/c++ 之间进行 ... -
利用 Base64 缩短 UUID 至22位
2012-04-15 18:57 7173UUID还是比较常用的,尤其在web应用里。 有时在UR ... -
图解Java中的值传递与引用传递(更新版)
2012-04-09 12:49 1179编程的人,都会遇到值传递与引用传递的困惑,不过很快都会迎 ... -
AWT Swing SWT JFace GWT 简介与比较
2012-03-15 13:49 4252AWT Abstract Windows To ...
相关推荐
在S7-1200 PLC编程中,经常会遇到不同类型数据间的转换问题,尤其是...4. 在编程过程中,时刻注意数据类型的特性,防止出现不必要的误解。 理解并掌握这些要点,将有助于你在实际编程中顺利地进行不同类型数据的转换。
尤其在处理二进制数据时,byte类型与其他数据类型(如String、boolean、int、InputStream等)之间的转换尤为重要。本文档旨在详细介绍byte与各种常见类型之间的转换方法,帮助开发者更好地理解和掌握这一技能。 ###...
本篇将详细介绍如何在Android中将byte数据序列化为对象以及对象转化为二进制数据。 首先,我们需要理解什么是序列化和反序列化。序列化是将一个对象的状态转换为可以存储或传输的形式,通常是二进制数据。反序列化...
这个名为"GF_Byte_To_Dword"的全局FC(Function Block)库文件是为了解决数据类型转换的问题。在TIA博途中,用户可以创建自定义的函数块,这些函数块可以在项目中重复使用,提高代码的复用性和效率。GF_Byte_To_...
Java 中将对象转化为 byte 数组的方法是指将 Java 对象序列化为二进制数据流,以便在网络上传输或存储。这种方法可以应用于各种领域,如分布式计算、网络通信、数据存储等。 在 Java 中,对象转化为 byte 数组通常...
2. **数据类型转换**:在C++中,可以使用`reinterpret_cast`来实现不同类型之间的转换。例如,将一个`char`数组直接转换为`float`类型。 3. **内存操作**:在进行字节到浮点数的转换时,可能需要使用指针操作,如`...
VC++6.0常用数据类型及其操作详解 VC++6.0 中的数据类型是指在编程过程中用来存储和操作数据的基本单元。这些数据类型可以分为基础数据类型和 Win32API 常用数据类型两大类。 一、基础数据类型 基础数据类型是指...
1. **基本数据类型转换**:C#中有多种内置的基本数据类型,如整型(int, short, byte等)、浮点型(float, double)、字符型(char)、布尔型(bool)等。在需要将一种类型的数据赋值给另一种类型变量时,可以使用...
在计算机编程中,尤其是涉及到图形处理和数据存储时,经常需要在不同的数据类型之间进行转换。在VC(Visual C++)环境下,Bitmap对象是用于表示图像的一种常见数据结构,而`Byte[]`(字节数组)则常用于数据传输或...
### 数据类型转换的相关知识点 #### 一、概述 在Java编程语言中,数据类型转换是一项基本而重要的功能,尤其在处理不同数据格式时显得尤为重要。本文档提供的代码示例主要展示了如何将ASCII码流转换为BCD(Binary-...
Unity中Byte[]转Image,读取本地文件字节流,将其转换成图片
在 C# 中,有多种数据类型,包括 bool、char、byte、sbyte、ushort、uint、ulong、short、int、long、float、double 等。每种数据类型都有其特点和应用场景。 _bool_ 是一个布尔类型,用于表示 true 或 false 两个...
byte——Byte short——Short int——Integer ...封装了字符串转化成基本数据类型的方法(重点) 常用的字符串转化为基本数据类型的方法: Integer.parseInt() Long.parseLong() Double.parseDouble()
在Access中,有一系列的转换函数,如CBool、CByte、CCur、CDate、CDbl、CDec、CInt、CLng、CSng、CStr和CVar,它们允许我们把表达式转换成特定的数据类型。表达式可以是算术或逻辑运算、常量、函数、字段名称、控件...
### C# EmguCV 数据类型转换详解 #### 一、引言 在计算机视觉领域,EmguCV作为C#版本的OpenCV库,在处理图像识别、图像分析等任务时非常实用。EmguCV支持多种图像数据类型之间的转换,这对于开发高效、灵活的应用...
在Delphi编程环境中,字符串(String)与字节数组(Byte Array)之间的转换是常见的操作,尤其是在处理二进制数据、网络通信或者文件读写时。本文将深入探讨如何在Delphi中实现这两种类型的数据互换。 1. **字符串...
根据给定文件的信息,我们可以总结出以下几个主要的知识点: ### 1. Java字符串长度的求法 在Java中,可以通过`length()`方法来获取字符串的长度...掌握它们可以帮助开发者更高效地处理字符串和其他数据类型的问题。
这样的需求常见于网络传输、文件存储以及其他需要将图像数据序列化或反序列化的场景。本文档将详细介绍两个方法:一个是如何将`Image`对象转换为`byte[]`数组;另一个是如何将`byte[]`数组还原回`Image`对象。 ####...
2.将字节数组转化为String类型的数据 3.转换一个int为byte数组 4.从字节数组中指定的位置读取一个Integer类型的数据 5.转换一个shor字符串为byte数组 6.从字节数组中指定的位置读取一个Short类型的数据