java中基本数据类型和C语言中基本数据类型转换
java中
1 short = 2 byte
1 char = 2 byte
1 int = 4 byte
1 long = 8 byte
C语言中
typedef unsigned char byte;
在32 位的系统上short 咔出来的内存大小是2 个byte;
int 咔出来的内存大小是4 个byte;
long 咔出来的内存大小是4 个byte;
float 咔出来的内存大小是4 个byte;
double 咔出来的内存大小是8 个byte;
char 咔出来的内存大小是1 个byte。
(注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下)
import java.nio.ByteOrder;
public class BytesTransUtils {
private String TAG = "BytesTransUtils";
private static BytesTransUtils instance = null;
private BytesTransUtils() {
// Log.i(TAG, "instance BytesTransUtils");
}
public static BytesTransUtils getInstance() {
if (instance == null) {
instance = new BytesTransUtils();
}
return instance;
}
public boolean testCPU() {
if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) {
// System.out.println("is big ending");
return true;
} else {
// System.out.println("is little ending");
return false;
}
}
public byte[] getBytes(short s, boolean bBigEnding) {
byte[] buf = new byte[2];
if (bBigEnding){
for (int i = buf.length - 1; i >= 0; i--) {
buf[i] = (byte) (s & 0x00ff);
s >>= 8;
}
}
else {
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) (s & 0x00ff);
s >>= 8;
}
}
return buf;
}
public byte[] getBytes(int s, boolean bBigEnding) {
byte[] buf = new byte[4];
if (bBigEnding) {
for (int i = buf.length - 1; i >= 0; i--) {
buf[i] = (byte) (s & 0x000000ff);
s >>= 8;
}
} else {
System.out.println("1");
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) (s & 0x000000ff);
s >>= 8;
}
}
return buf;
}
public byte[] getBytes(long s, boolean bBigEnding) {
byte[] buf = new byte[8];
if (bBigEnding) {
for (int i = buf.length - 1; i >= 0; i--) {
buf[i] = (byte) (s & 0x00000000000000ff);
s >>= 8;
}
}
else {
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) (s & 0x00000000000000ff);
s >>= 8;
}
}
return buf;
}
public short getShort(byte[] buf, boolean bBigEnding) {
if (buf == null) {
throw new IllegalArgumentException("byte array is null!");
}
if (buf.length > 2) {
throw new IllegalArgumentException("byte array size > 2 !");
}
short r = 0;
if (bBigEnding) {
for (int i = 0; i < buf.length; i++) {
r <<= 8;
r |= (buf[i] & 0x00ff);
}
} else {
for (int i = buf.length - 1; i >= 0; i--) {
r <<= 8;
r |= (buf[i] & 0x00ff);
}
}
return r;
}
public int getInt(byte[] buf, boolean bBigEnding) {
if (buf == null) {
throw new IllegalArgumentException("byte array is null!");
}
if (buf.length > 4) {
throw new IllegalArgumentException("byte array size > 4 !");
}
int r = 0;
if (bBigEnding) {
for (int i = 0; i < buf.length; i++) {
r <<= 8;
r |= (buf[i] & 0x000000ff);
}
} else {
for (int i = buf.length - 1; i >= 0; i--) {
r <<= 8;
r |= (buf[i] & 0x000000ff);
}
}
return r;
}
public long getLong(byte[] buf, boolean bBigEnding) {
if (buf == null) {
throw new IllegalArgumentException("byte array is null!");
}
if (buf.length > 8) {
throw new IllegalArgumentException("byte array size > 8 !");
}
long r = 0;
if (bBigEnding) {
for (int i = 0; i < buf.length; i++) {
r <<= 8;
r |= (buf[i] & 0x00000000000000ff);
}
} else {
for (int i = buf.length - 1; i >= 0; i--) {
r <<= 8;
r |= (buf[i] & 0x00000000000000ff);
}
}
return r;
}
/*----------------------------------------------------------*/
/* 对转换进行一个简单的封装 */
/*----------------------------------------------------------*/
public byte[] getBytes(int i) {
return getBytes(i, this.testCPU());
}
public byte[] getBytes(short s) {
return getBytes(s, this.testCPU());
}
public byte[] getBytes(long l) {
return getBytes(l, this.testCPU());
}
public int getInt(byte[] buf) {
return getInt(buf, this.testCPU());
}
public short getShort(byte[] buf) {
return getShort(buf, this.testCPU());
}
public long getLong(byte[] buf) {
return getLong(buf, this.testCPU());
}
/****************************************/
public short[] Bytes2Shorts(byte[] buf) {
byte bLength = 2;
short[] s = new short[buf.length / bLength];
for (int iLoop = 0; iLoop < s.length; iLoop++) {
byte[] temp = new byte[bLength];
for (int jLoop = 0; jLoop < bLength; jLoop++) {
temp[jLoop] = buf[iLoop * bLength + jLoop];
}
s[iLoop] = getShort(temp);
}
return s;
}
public byte[] Shorts2Bytes(short[] s) {
byte bLength = 2;
byte[] buf = new byte[s.length * bLength];
for (int iLoop = 0; iLoop < s.length; iLoop++) {
byte[] temp = getBytes(s[iLoop]);
for (int jLoop = 0; jLoop < bLength; jLoop++) {
buf[iLoop * bLength + jLoop] = temp[jLoop];
}
}
return buf;
}
/****************************************/
public int[] Bytes2Ints(byte[] buf) {
byte bLength = 4;
int[] s = new int[buf.length / bLength];
for (int iLoop = 0; iLoop < s.length; iLoop++) {
byte[] temp = new byte[bLength];
for (int jLoop = 0; jLoop < bLength; jLoop++) {
temp[jLoop] = buf[iLoop * bLength + jLoop];
}
s[iLoop] = getInt(temp);
System.out.println("2out->"+s[iLoop]);
}
return s;
}
public byte[] Ints2Bytes(int[] s) {
byte bLength = 4;
byte[] buf = new byte[s.length * bLength];
for (int iLoop = 0; iLoop < s.length; iLoop++) {
byte[] temp = getBytes(s[iLoop]);
System.out.println("1out->"+s[iLoop]);
for (int jLoop = 0; jLoop < bLength; jLoop++) {
buf[iLoop * bLength + jLoop] = temp[jLoop];
}
}
return buf;
}
/****************************************/
public long[] Bytes2Longs(byte[] buf) {
byte bLength = 8;
long[] s = new long[buf.length / bLength];
for (int iLoop = 0; iLoop < s.length; iLoop++) {
byte[] temp = new byte[bLength];
for (int jLoop = 0; jLoop < bLength; jLoop++) {
temp[jLoop] = buf[iLoop * bLength + jLoop];
}
s[iLoop] = getLong(temp);
}
return s;
}
public byte[] Longs2Bytes(long[] s) {
byte bLength = 8;
byte[] buf = new byte[s.length * bLength];
for (int iLoop = 0; iLoop < s.length; iLoop++) {
byte[] temp = getBytes(s[iLoop]);
for (int jLoop = 0; jLoop < bLength; jLoop++) {
buf[iLoop * bLength + jLoop] = temp[jLoop];
}
}
return buf;
}
}
java中基本数据类型和C语言中基本数据类型转换的更多相关文章
- java 8 Stream中操作类型和peek的使用
目录 简介 中间操作和终止操作 peek 结论 java 8 Stream中操作类型和peek的使用 简介 java 8 stream作为流式操作有两种操作类型,中间操作和终止操作.这两种有什么区别呢 ...
- Python3.x中bytes类型和str类型深入分析
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
- 关于 Go 中 Map 类型和 Slice 类型的传递
关于 Go 中 Map 类型和 Slice 类型的传递 Map 类型 先看例子 m1: func main() { m := make(map[int]int) mdMap(m) fmt.Printl ...
- Java并发工具类CountDownLatch源码中的例子
Java并发工具类CountDownLatch源码中的例子 实例一 原文描述 /** * <p><b>Sample usage:</b> Here is a pai ...
- iconv简介(1、字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2、编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有linux等)
iconv简介(1.字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2.编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有lin ...
- Java中int类型和tyte[]之间转换及byte[]合并
JAVA基于位移的 int类型和tyte[]之间转换 [java] view plaincopy /** * 基于位移的int转化成byte[] * @param int number * @retu ...
- Java中日期类型和mysql中日期类型进行整合
1. java与mysql中日期.时间类型总结: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mysql(版本:5.1.50)的时间日期类型如下: da ...
- java中XMLGregorianCalendar类型和Date类型之间的相互转换
import java.text.SimpleDateFormat;import java.util.Date;import java.util.GregorianCalendar;import ja ...
- MySQL中Decimal类型和Float Double的区别 & BigDecimal与Double使用场景
MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...
随机推荐
- ios做的两个矩形相交叉
#import "ViewController.h" @interface ViewController (){ UIView *_gee; //定义的实例变量 UI ...
- bg-route
1.目录 homework add.html online.html offline.html res script action homework add.js 2.add.html<div ...
- C++中为什么构造函数初始化列表
已经有个构造函数负责初始化,为什么还需要构造函数初始化表呢? 在以下三种情况下需要使用初始化成员列表:一,需要初始化的数据成员是对象的情况:二,需要初始化const修饰的类成员:三,需要初始化引用成员 ...
- Linux中切换用户变成-bash4.1-$的解决方法【转】
转自 Linux中切换用户变成-bash4.1-$的解决方法 - xia_xia的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/xia_xia0919/articl ...
- 给EditText设置边框
布局文件中加入background属性: <EditText android:layout_width="200dp" android:layout_height=" ...
- dip2px
package com.itheima.zhbj.utils; import android.content.Context; public class DensityUtils { public s ...
- jquery新窗口打开链接
第一种:下面的代码是针对m35ui这个样式下的a都是在新窗口打开 <script type="text/javascript"> jQuery(document ...
- Redis如何保存数组和对象
个人建议使用PHP自带的序列化函数serialize和unserialize函数 我们可以封装一个自己的Redis类 <?php class MyRedis{ private static $h ...
- CLR 无法从 COM
上下文 0x50ece80 转换为 COM 上下文 0x50ecf38,这种状态已持续 60 秒.拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个 ...
- Category / Extention / 属性 / 成员变量 /
转载自:http://blog.csdn.net/itianyi/article/details/8618128 在ios第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个 ...