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;
     }
 
}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Java基本数据类型C语言的异同 相同点:JavaC语言都有基本数据类型,如整型、浮点型、字符型等。 不同点: - Java基本数据类型是平台无关的,而C语言基本数据类型是依赖于底层计算机的,不同的计算机可能有不同的数据类型长度。 - Java有布尔类型(boolean),而C语言没有。 - Java基本数据类型都是对象,而C语言基本数据类型不是对象。 - Java的整型默认是有符号的,而C语言的整型默认是无符号的。 - Java的浮点型默认是双精度的,而C语言的浮点型默认是单精度的。 2. 泛型与枚举的各自特点 泛型: - 泛型可以让代码更加通用、安全和易读。 - 泛型可以让我们在编译期间就发现类型错误,而不是在运行期间发现。 - 泛型可以避免强制类型转换,提高代码的可读性和可维护性。 枚举: - 枚举可以让代码更加清晰、易读、易维护,避免使用硬编码的常量。 - 枚举可以限制变量的取值范围,避免出现不合法的值。 - 枚举可以实现单例模式,保证在整个应用程序只有一个实例。 - 枚举可以实现比较操作,方便进行排序和查找等操作。 总的来说,泛型和枚举都可以让代码更加清晰、易读、易维护,但是它们的应用场景不同。泛型适用于需要处理不同类型数据的情况,而枚举适用于需要限制变量取值范围或者需要实现单例模式的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值