利用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编码。

最新文章

  1. java实现快速排序
  2. RGB与HSV颜色空间
  3. Chrome开发工具Elements面板(编辑DOM和CSS样式)详解
  4. 网页设计、java、Andorid资源清单整理
  5. 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)
  6. upgrade和update的区别
  7. mysql 根据规定的数组进行排序
  8. 【夸QT在十五】ctkPluginFrameWork插件系统Windows编译器
  9. ubuntu下java和tomcat安装配置
  10. Django---form表单提交数据到数据库(普通方法+Django的form类)
  11. odoo11 访问MSQL Server等第三发数据源
  12. 尝试去读SQLMAP源码(一)
  13. paloalto防火墙内存使用率高
  14. AI-序列化-做五个数据接口
  15. Go中的panic和recover
  16. Gym 101981G - Pyramid - [打表找规律][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem G]
  17. skynet inject address file.lua
  18. Linux CentOS6.6 NFS服务的配置与安装
  19. hibernate 延迟加载深入分析(persistentSet的延迟加载)
  20. ES6躬行记(22)——Promise

热门文章

  1. Appium Android sdk自动化工具安装
  2. PHP邮件发送
  3. CentOS 下 安装 nginx
  4. Red–black tree ---reference wiki
  5. spring mvc 外键允许Null
  6. View视图调用控制器方法
  7. Ajax简单介绍和使用步骤
  8. CMDB认识和需求分析
  9. mysql 常用操作语句
  10. java调用c#dll文件配置