利用socket进行网络传输的时候往往需要将int转换为bytes,将string转换为bytes以及一些其他类型的数据转换

java和c类型的区别:
变量类型 C中字节数 Java中字节数
char
byte 无   
short
int
long

int 和bytes

int-bytes
:Integer.toString(int b).getBytes());
:
public static void int2Bytes(int i, byte[] buf, int offset) {
buf[offset] = (byte) i;
i >>= ;
buf[offset + ] = (byte) i;
i >>= ;
buf[offset + ] = (byte) i;
i >>= ;
buf[offset + ] = (byte) i;
}
bytes-int
:Integer.parseInt((bytes[] b).toString())
:
private static int byte2Int(byte[] bs) {
int retVal = ;
int len = bs.length < ? bs.length : ;
for (int i = ; i < len; i++) {
retVal |= (bs[i] & 0xFF) << ((i & 0x03) << );
}
return retVal;
// 如果确定足4位,可直接返回值
//return (bs[0]&0xFF) | ((bs[1] & 0xFF)<<8) | ((bs[2] & 0xFF)<<16) | ((bs[3] & 0xFF)<<24);
}

int和String

int-String  int i
:Integer.toString(i,xx); //xx为想要用什么进制来表示,缺省为10进制
:i+" ";
:String.valueOf(i);//和1不同的是他可以转换的除了对象还可以为基本数据类型比如long boolean double
//而且i可以为null但是1的i为null的话就会报错抛出异常
String-int String s
:Integer.parseInt(s)

bytes和String

String-bytes:(String a)
:a.getBytes(x);//x为指定的编码,缺省的话为utf-8
//同一个字符串调用a.getBytes()两次并且分别打印,他们的内容会不同,调用一次返回的都是一个新的数组对像, 你打印的是对象引用的哈希码(不是对像里面的内容),
//肯定是不一样的(因为每次返回都是一个新的变量).他们的内容是一样的.
:(byte)a.charAt(i)
bytes-String :bytes[] b
:String a=new String(b,x);//x为指定的编码,缺省的话为utf-8
:
StringBuffer sb=new StringBuffer();
for(int i=;i<b.length;i++){
sb.append((char)b[i]);
}
System.out.println(sb.toString());

特别注意编码问题:  
  1:
  bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };
  String string = new String(bytes);
  byte[] ret = string.getBytes();
  查看ret的数据发现是50, 0, -17, -65, -67, 28, -17, -65, -67,发现数据并不是原来的数据。
  而使用如下代码就可以得到原来的数据:
  2:
  bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };
  StringisoString = new String(bytes, "ISO-8859-1");
  byte[] isoret = isoString.getBytes("ISO-8859-1");
  第一种方法默认是用UTF-8编码来生成String的,用System.getProperty("sun.jnu.encoding")可以得到
  Android默认编码是UTF-8。UTF-8是可变长度的编码,原来的字节数组就被改变了。而ISO8859-1通常叫做
  Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,
  它是单字节的编码方式,这样第二种方式生成的String里的字节数组就跟原来的字节数组一样。在new String
  使用其他编码如GBK,GB2312的话一样也会导致字节数组发生变化,因此要想获取String里单字节数组,就应该
  使用iso8859-1编码。

java和c通信相关的数据类型转换的更多相关文章

  1. Java知多少(11)数据类型转换

    数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...

  2. java===java基础学习(3)---数据类型转换,运算符级别,枚举类型

    数据类型转换: 有的时候,程序需要将数据类型,比如 int + float ,结果是float, 这里的int就被转换为float类型,属于合法转换. Java中的合法转换如下图: 红色表示无信息丢失 ...

  3. (6)java基础知识-基本数据类型、数据类型转换

    一.基本数据类型 基本的数据类型一共有四类八种 1.整型 byte:  1字节 取值范围 -128~127 short: 2字节    取值范围 -32768~32767 int:     4字节 取 ...

  4. Java基础笔记(五)——数据类型转换

    数据类型的精度由低到高为:byte < short < char < int < long < float < double 低精度的类型与高精度的类型在进行运算时 ...

  5. Hibernate Java、Hibernate、SQL 之间数据类型转换

    Hibernate映射类型 Java类型 标准SQL类型  integer  java.lang.Integer  integer  long  java.lang.Long  bigint  sho ...

  6. JAVA基础知识(五)数据类型转换

     当使用 +.-.*./.%.运算操作时,遵循如下规则: 1.只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型: 2.如果两个操作数中有一个 ...

  7. java基础之数据类型转换

    在写java程序时,经常会遇到需要数据类型转换,下面我们来介绍一些一些基本数据类型之间的转换. 1.int,folat,double,boolean,long 转换成字符串,其实很简单只需使用一个函数 ...

  8. Java笔记1 : 在生产者消费者模式中,线程通信与共享数据,死锁问题与解决办法

    本例定义了4个类,这里说一下,方便下面讲解.分别是Product(产品),Producer(生产者),Consumer(消费者), Test(测试类). 多线程之间通信与共享数据只要引用同一内存区域就 ...

  9. Java基础知识强化22:Java中数据类型转换

    数据类型转换: (1). 自动转换 低级变量可以直接转换为高级变量,这叫自动类型转换.比如: byte b: int b:  long b:  float b:   double  b: 上面的语句可 ...

随机推荐

  1. python 生成、删除、拷贝目录

    1. 生成目录 函数原型:distutils.dir_util.mkpath(name[, mode=0777, verbose=0, dry_run=0]) from distutils impor ...

  2. zstu 4212 ——String Game ——————【字符串处理】

    4212: String Game Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 337  Solved: 41 Description Alice a ...

  3. 前端参数统一校验工具类ValidParamUtils

    1,前端参数不可信,对于后端开发人员来说应该是一条铁律,所以对于前端参数的校验,必不可少,而统一的前端参数校验工具,对我们进行参数校验起到事半功倍的效果 2,统一参数校验工具ValidParamUti ...

  4. C#学习笔记9

    1.多播委托:由与delegate关键字声明的委托,在编译后默认继承Delegate与MulticastDelegate类型,所以声明的委托自然就含有多播委托的特性,即一个委托变量可以调用一个方法链( ...

  5. Linux自有服务

    Linux自有服务 Linux自带的功能:运行模式.用户和用户组管理.网络配置.ssh服务 1.运行模式 Linux下的初始化进程:init,进程id为1 该进程的配置文件:/etc/inittab ...

  6. C++基础--static的用法

    首先,看看变量的存储: int global ; int main() { int stackStore ; int heapStore* = (int *)malloc(sizeof(int)); ...

  7. Linux CentOS如何汉化系统

    su root切换为root用户 写入环境变量 echo "export LANG="zh_CN.UTF8"">>/etc/profile sour ...

  8. android launcher

    1.android_launcher的源码详细分析 2.android---launcher 3.Android 4.4 Launcher3桌面源码分析 4.通过深度剖析Android之Launche ...

  9. nginx配置+uwsgi+负载均衡配置

    nginx静态文件配置 location /static{ alias /var/www/myApp/static; } sudo mkdir -vp /var/www/myApp/static/ s ...

  10. 推荐一个很好用的脚本session snapper

    源网址http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper 内容: If you want to just download Sn ...