+ d& ` L+ Q1 `我爱电脑技术论坛
0 @: D5 n7 _- {8 N6 Lwww.520diannao.com5. 字符串和字符数组之间的转换
1 l& q) X* ~& @ P: d7 Q4 T; E, Z我爱电脑技术社区--打造最好的电脑技术自学交流平台2 V) b4 B& |+ v I5 N* t+ H
- N8 |2 } ]* Q5 \5 }- G我爱电脑技术社区--打造最好的电脑技术自学交流平台字符串类 System.String 提供了一个 void ToCharArray() 方法,该方法可以实现字符串到字符数组的转换。如下例:
+ Z/ p! p/ |- c( ]6 n打造最好的电脑自学交流论坛
% \+ |( s0 ^3 @; M$ j {我爱电脑技术论坛private void TestStringChars() {电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站; S/ V0 v* V" T9 t
( ]" {5 s8 O/ g' b1 A- u8 v/ J E
string str = "mytest";
3 x; S5 [ E# E/ X, w/ G% C
: v! J2 J6 p: `' U% g$ U% O! _, v _我爱电脑技术论坛 char[] chars = str.ToCharArray();# L7 n( Q, N6 | y
9 N; I6 q# t ^( {$ dwww.520diannao.com this.textBox1.Text = "";打造最好的电脑自学交流论坛 A# s. L9 G: Q2 _- B
打造最好的电脑自学交流论坛* e. j% }2 m! I
this.textBox1.AppendText("Length of \"mytest\" is " + str.Length + "");电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站0 S% }# |1 `6 m
# q8 U* M$ z3 L1 w我爱电脑技术论坛 this.textBox1.AppendText("Length of char array is " + chars.Length + "");www.520diannao.com& Y! v- ?( }; h. @2 [2 ^
7 S8 g5 }( e( G$ M4 |& K2 f
this.textBox1.AppendText("char[2] = " + chars[2] + "");www.520diannao.com# T% H% V* h! K* k/ P! z
( `0 z" {" Q: ~电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站}例中以对转换转换到的字符数组长度和它的一个元素进行了测试,结果如下:我爱电脑技术社区--打造最好的电脑技术自学交流平台. i# E s( M. S6 C. }! a
( o* M" t# v7 O& W) s1 R我爱电脑技术论坛Length of "mytest" is 6打造最好的电脑自学交流论坛, ~ C- \4 f) U) O$ y% G2 y
Length of char array is 6
/ J- h, t- E% R' |; l" f6 ?2 twww.520diannao.comchar[2] = t
7 [( @# [7 u9 o. T5 n, ~6 ]7 x我爱电脑技术论坛
2 e, w" ~. s a5 |1 m) j电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站可以看出,结果完全正确,这说明转换成功。那么反过来,要把字符数组转换成字符串又该如何呢?www.520diannao.com& i" f% l5 C. @$ c' E. l
我们可以使用 System.String 类的构造函数来解决这个问题。System.String 类有两个构造函数是通过字符数组来构造的,即 String(char[]) 和 String[char[], int, int)。后者之所以多两个参数,是因为可以指定用字符数组中的哪一部分来构造字符串。而前者则是用字符数组的全部元素来构造字符串。我们以前者为例,在 TestStringChars() 函数中输入如下语句:我爱电脑技术社区--打造最好的电脑技术自学交流平台& U# ~: s) \( O
! B) ]) j' v5 P2 [8 i
char[] tcs = {'t', 'e', 's', 't', ' ', 'm', 'e'};
2 {) O7 j2 o M+ w' g我爱电脑技术论坛string tstr = new String(tcs);www.520diannao.com7 t7 \& W" w- R' G' z* F: [
this.textBox1.AppendText("tstr = \"" + tstr + "\"");www.520diannao.com5 s. s. l2 E1 f& i+ V) ]
打造最好的电脑自学交流论坛. z5 w/ A. q5 g& R8 N
运行结果输入 tstr = "test me",测试说明转换成功。
7 i, R1 c4 A V2 C: i5 jwww.520diannao.com实际上,我们在很多时候需要把字符串转换成字符数组只是为了得到该字符串中的某个字符。如果只是为了这个目的,那大可不必兴师动众的去进行转换,我们只需要使用 System.String 的 [] 运算符就可以达到目的。请看下例,再在 TestStringChars() 函数中加入如如下语名:- t3 K9 L7 l' T5 ?0 f) n/ w/ A
我爱电脑技术社区--打造最好的电脑技术自学交流平台. L: t1 w7 ^/ c# G
char ch = tstr[3];打造最好的电脑自学交流论坛& b7 d' \1 [7 s& ^1 E2 B9 t- l/ V
this.textBox1.AppendText("\"" + tstr + "\"[3] = " + ch.ToString());www.520diannao.com0 t p. u9 ^( |# y# Q+ X: r( W+ O* @
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站4 O, \ |* D \9 {* R" \
正确的输出是 "test me"[3] = t,经测试,输出正确。我爱电脑技术论坛$ N4 ?3 i$ t+ o
/ \" |9 y3 W* l! n% s我爱电脑技术论坛6. 字符串和字节数组之间的转换我爱电脑技术社区--打造最好的电脑技术自学交流平台" u7 X4 T* y/ y9 ^& {5 N# ^
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站$ X8 `4 P" y5 j) D; \3 Q6 e! C
如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了。为了进行这样的转换,我们不得不借助另一个类:System.Text.Encoding。该类提供了 bye[] GetBytes(string) 方法将字符串转换成字节数组,还提供了 string GetString(byte[]) 方法将字节数组转换成字符串。打造最好的电脑自学交流论坛3 o5 I x5 W: ^8 t# ]' R' _
; |* l! P: p( v% W3 @ ]打造最好的电脑自学交流论坛System.Text.Encoding 类似乎没有可用的构造函数,但我们可以找到几个默认的 Encoding,即 Encoding.Default(获取系统的当前 ANSI 代码页的编码)、Encoding.ASCII(获取 7 位 ASCII 字符集的编码)、Encoding.Unicode(获取采用 Little-Endian 字节顺序的 Unicode 格式的编码)、Encoding.UTF7(获取 UTF-7 格式的编码)、Encoding.UTF8(获取 UTF-8 格式的编码) 等。这里主要说说 Encoding.Default 和 Encoding.Unicode 用于转换的区别。7 {/ C5 a. ]! h, C8 g, u: K
3 T- Y# {! I5 u" V V4 j3 \" ?我爱电脑技术论坛在字符串转换到字节数组的过程中,Encoding.Default 会将每个单字节字符,如半角英文,转换成 1 个字节,而把每个双字节字符,如汉字,转换成 2 个字节。而 Encoding.Unicode 则会将它们都转换成两个字节。我们可以通过下列简单的了解一下转换的方法,以及使用 Encoding.Default 和 Encodeing.Unicode 的区别:我爱电脑技术社区--打造最好的电脑技术自学交流平台' a6 q) ^! D$ B. S) a' D
: J: o% ~9 n! w& M9 rprivate void TestStringBytes() {
1 z2 i/ R: s& U/ A电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站我爱电脑技术社区--打造最好的电脑技术自学交流平台9 m4 Z0 Y/ z/ [' P
string s = "C#语言";电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站* g6 y4 X( b7 F; o
- ?& b# l9 j3 Y) d( K E0 K4 iwww.520diannao.com byte[] b1 = System.Text.Encoding.Default.GetBytes(s);电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站+ f5 R) k* Z) |0 b1 G: y% j
我爱电脑技术社区--打造最好的电脑技术自学交流平台( U' W3 N- t- b8 ? U8 r4 T
byte[] b2 = System.Text.Encoding.Unicode.GetBytes(s);
4 L7 {) V' ]* a4 O4 lwww.520diannao.com打造最好的电脑自学交流论坛 ^: a B6 T- ]( q0 d: b+ v
string t1 = "", t2 = "";
" W+ ^0 V9 v, \( ^我爱电脑技术论坛2 L5 I( r# t& g) Q
foreach (byte b in b1) {我爱电脑技术社区--打造最好的电脑技术自学交流平台 B4 b7 c/ P) K' j% c
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站. T( I s# a: l- r! t6 z8 K' c
t1 += b.ToString("") + " ";
, D. H( D3 y+ U$ C打造最好的电脑自学交流论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站( p7 @* T- j* ~8 k' X
}我爱电脑技术论坛4 O* q- S* _4 N
, b: J2 w0 ]0 \2 ywww.520diannao.com foreach (byte b in b2) { r+ `2 \3 j W! k/ s/ Q8 W1 a
打造最好的电脑自学交流论坛$ F5 O1 d& A; ]. L
t2 += b.ToString("") + " ";
- ?4 F; X9 \0 a: m5 `我爱电脑技术论坛+ N* d6 [; h. P" w/ y
}我爱电脑技术社区--打造最好的电脑技术自学交流平台 S9 t8 w: |. P: V5 a" J
我爱电脑技术论坛. K% U# c5 P3 }' \- I" ^# p" d
this.textBox1.Text = "";
. G' [4 u* w" ^# T, v8 Wwww.520diannao.com
% @4 d' R+ F; M2 G8 m电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 this.textBox1.AppendText("b1.Length = " + b1.Length + "");
4 E2 y0 q7 n% I9 t" J4 i0 O我爱电脑技术社区--打造最好的电脑技术自学交流平台打造最好的电脑自学交流论坛# h, `8 T1 G+ o/ }- {
this.textBox1.AppendText(t1 + "");我爱电脑技术社区--打造最好的电脑技术自学交流平台4 y Q& l& e3 M+ a: ~
我爱电脑技术社区--打造最好的电脑技术自学交流平台9 G, H4 J+ A9 q+ c& m
this.textBox1.AppendText("b2.Length = " + b2.Length + "");
( j" R: s* z+ p8 P! W- s/ _# q) h电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站我爱电脑技术论坛. Z3 a7 k3 e( w
this.textBox1.AppendText(t2 + "");电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站2 a8 u3 D2 ^8 C2 G1 R
- T1 X' }* g: H1 q6 ]7 N) A* Z
}
% t' l a- B/ q' @5 @电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站我爱电脑技术论坛7 h: E0 [+ p3 ^5 y/ \
运行结果如下,不说详述,相信大家已经明白了。
- j6 s; `: K4 [打造最好的电脑自学交流论坛
: g, I3 {. @) V ?' T* y* ib1.Length = 6我爱电脑技术社区--打造最好的电脑技术自学交流平台! P" `( G) B& C1 s N* |+ |
67 35 211 239 209 212 我爱电脑技术社区--打造最好的电脑技术自学交流平台& R& \ ]8 U( k+ Z6 ~7 O! q8 d
b2.Length = 87 k( C: T; ~9 w$ ~% L
67 0 35 0 237 139 0 138 我爱电脑技术社区--打造最好的电脑技术自学交流平台5 \" d( b/ S2 E- [3 \: c8 L
9 R4 H! c& {, @! P% F将字节数组转换成字符串,使用 Encoding 类的 string GetString(byte[]) 或 string GetString(byte[], int, int) 方法,具体使用何种 Encoding 还是由编码决定。在 TestStringBytes() 函数中添加如下语句作为实例:
2 V2 R1 [- v4 a9 V) i E1 i我爱电脑技术论坛
' W, n9 I' {4 l打造最好的电脑自学交流论坛byte[] bs = {97, 98, 99, 100, 101, 102};
9 e) j! T& ?: D$ Q: M, O我爱电脑技术论坛string ss = System.Text.Encoding.ASCII.GetString(bs);打造最好的电脑自学交流论坛7 A' m) o+ \; r# d5 k, T4 ~! \
this.textBox1.AppendText("The string is: " + ss + "");www.520diannao.com3 V; ?$ [8 z: M" }$ h
- D3 |8 q' v, ]% H2 j' ?! V打造最好的电脑自学交流论坛运行结果为:The string is: abcdef