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语言中基本数据类型转换的更多相关文章

  1. java 8 Stream中操作类型和peek的使用

    目录 简介 中间操作和终止操作 peek 结论 java 8 Stream中操作类型和peek的使用 简介 java 8 stream作为流式操作有两种操作类型,中间操作和终止操作.这两种有什么区别呢 ...

  2. Python3.x中bytes类型和str类型深入分析

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...

  3. 关于 Go 中 Map 类型和 Slice 类型的传递

    关于 Go 中 Map 类型和 Slice 类型的传递 Map 类型 先看例子 m1: func main() { m := make(map[int]int) mdMap(m) fmt.Printl ...

  4. Java并发工具类CountDownLatch源码中的例子

    Java并发工具类CountDownLatch源码中的例子 实例一 原文描述 /** * <p><b>Sample usage:</b> Here is a pai ...

  5. iconv简介(1、字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2、编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有linux等)

    iconv简介(1.字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2.编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有lin ...

  6. Java中int类型和tyte[]之间转换及byte[]合并

    JAVA基于位移的 int类型和tyte[]之间转换 [java] view plaincopy /** * 基于位移的int转化成byte[] * @param int number * @retu ...

  7. 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 ...

  8. java中XMLGregorianCalendar类型和Date类型之间的相互转换

    import java.text.SimpleDateFormat;import java.util.Date;import java.util.GregorianCalendar;import ja ...

  9. MySQL中Decimal类型和Float Double的区别 & BigDecimal与Double使用场景

    MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...

随机推荐

  1. 【Python爬虫实战--1】深入理解urllib;urllib2;requests

    摘自:http://1oscar.github.io/blog/2015/07/05/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3urllib;urllib2;reques ...

  2. 第3章 Java语言基础----声明成员变量,对变量进行赋值

    声明成员变量,对变量进行赋值的正确语句,如下图所示:

  3. angular、bootstrap初稿搭建

    1.bootstrap3.0中,ie8不兼容响应式设计 @media,需要添加如下2个查件 <!-- html5.js for IE less than 9 -->     <!-- ...

  4. Ansible9:条件语句【转】

    在有的时候play的结果依赖于变量.fact或者是前一个任务的执行结果,从而需要使用到条件语句. 一.when    有的时候在特定的主机需要跳过特定的步骤,例如在安装包的时候,需要指定主机的操作系统 ...

  5. ILMerge 简单使用

    ILMerge是合并.net的assembly的工具,最新版的支持.net 4.0的ILmerge下载: http://www.microsoft.com/downloads/details.aspx ...

  6. STM32F407的硬件I2C

    源:STM32F407的硬件I2C 我使用的是STM32的固件库. 硬件模块使用之前必须配置其参数,I2C的配置如下: void IIC_Config(void) { GPIO_InitTypeDef ...

  7. MySql 插入10位以上长度的字符报错or截断

    当a字段为int类型时: 如果用MyBatis向MySql插入10个字符以上长度的字符串,则会报错. 如果直接在MySql中用sql语句插入10个字符以上长度的字符串,则会变成最大的int类型数值:2 ...

  8. mysql具体语句示例

    建表:(not null ,auto_increment, unique , primary key) create database balfish;use balfish;create table ...

  9. Problem A: 小火山的跳子游戏 多校训练2(小火山专场)(周期)

    题目链接:http://acm.zzuli.edu.cn/zzuliacm/problem.php?cid=1158&pid=0 zzuli 1905  题意:如果k=1的话是1,2,3,4. ...

  10. 在MFC对话框中添加状态栏

    如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图). 1. 首先,打开在资源视图的String Table并添加两个ID: ...