分享

字符串与byte[]之间的转换

 叹落花 2015-06-17

编码

同一个字符在不同的编码下会被编成不同长度的编码,

比如:ACSII,每个字符对应一个字节,实际上只使用了7位,从00h-7Fh。只能表达128个字符。

GB2312,中文的一种编码,每个字符使用两个字节表示。

UTF-8, 可以表达所有unicode字符,每个字符可以用1-3个字节表示。

UTF-16, 可以表达所有unicode字符,每个字符可以用1-2个16位整数表示。

UTF-32, 可以表达所有unicode字符,每个字符可以用1个32位整数表示。

 

object-c如何将汉字转成国际码?

  NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

下面是转化示例
NSString *string = [NSString stringWithFormat:@"汉字转化为国际码"];
NSData *dataString = [string dataUsingEncoding:enc];

NSString *newString = [[NSString alloc] initWithData:dataString encoding:enc]; 

(一)用ASCII码转换

 

[c-sharp] view plaincopy
  1. using   System.Text;     
  2.       
  3.   byte[]   b=Encoding.ASCII.GetBytes("yourstring");     
  4.  //  得到:121,111,117,114,115,116,114,105,110,103    
  5.   
  6.    
  7.   
  8.   /反向为:     
  9.   byte[]   b=new   byte[]{121,111,117,114,115,116,114,105,110,103};     
  10.   string   str=Encoding.ASCII.GetString(b);     
  11.   //得到:str="yourstring"     

(2) System.Text.Encoding.Default

  

[c-sharp] view plaincopy
  1. System.Text.Encoding.Default.GetString(byte[])//字节数组转换成字符串     
  2.   System.Text.Encoding.Default.GetBytes(string)//字符转换成字节数组     
  3.   //或byte[]=Convert.ToByte(string)  
  

(3)需要把string转换为byte[]使用的场景

任何需要把string序列化处理都需要这种转换,比如:

需要把string保存到文件中,必须把string转换成一个有序的字节流,以便系统在硬盘上做物理保存。

对string做加密操作时,加密算法是针对字节进行处理,这时也需要把string转换成字节流以便加密算法对数据进行处理。

String到字节流的转换涉及到使用何种编码,使用不同的编码得到的字节码不同,再从字节码做反操作恢复成string,必须使用编码时使用的编码或者兼容的编码,否则结果就是乱码。

///////////////////////////////////////////////////////////////////////////////////

 string转换为byte []的操作

1、 确定使用的编码

       使用Encoding类的静态方法GetEncoding方法获得某个类型的Encoding对象。

        public static Encoding.GetEncoding(int codepage)

       codepage指定这种返回代码页的Encoding

       public static Encoding GetEncoding (string name)

       name 指定这种返回代码名的Encoding

      其中使用到的代码页和代码名在上面表中。

       比如要获得一个utf-8的Encoding对象

       Encoding myEncoding = Encoding.GetEncoding("utf-8");

2、 从string到byte[]

     string sData = “字符串”;

     byte[] myByte = myEncoding.GetBytes(sData);
   
   

    使用GetBytes方法时,不产生前面所说的识别不同UTF格式的前导符。

3、 从byte[]到string

    byte[] myByte = new byte[]{};

    string sData = myEncoding.GetString(byte[] myByte);

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多