Danh mục

Thao tác Dữ liệu phần 2

Số trang: 7      Loại file: pdf      Dung lượng: 206.70 KB      Lượt xem: 1      Lượt tải: 0    
thaipvcb

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Chạy CharacterEncodingExample sẽ tạo ra file output.txt. Mở file này trong một trình soạn thảo có hỗ trợ Unicode, bạn sẽ thấy kết quả như sau: Source Text
Nội dung trích xuất từ tài liệu:
Thao tác Dữ liệu phần 2Chạy CharacterEncodingExample sẽ tạo ra file output.txt. Mở file này trong một trìnhsoạn thảo có hỗ trợ Unicode, bạn sẽ thấy kết quả như sau:Source Text : Area = Πr^2UTF-16 Bytes: 41-00-72-00-65-00-61-00-20-00-3D-00-20-00-A0-03-72-00-5E-00-32-00UTF-8 Bytes: 41-72-65-61-20-3D-20-CE-A0-72-5E-32ASCII Bytes: 41-72-65-61-20-3D-20-3F-72-5E-32UTF-8 Text : Area = Πr^2ASCII Text : Area = ?r^2Chú ý rằng, nếu sử dụng UTF-16 thì mỗi ký tự được mã hóa bởi 2 byte, nhưng vì hầu hếtcác ký tự đều là ký tự chuẩn nên byte cao là 0 (nếu sử dụng little-endian thì byte thấp viếttrước). Do đó, hầu hết các ký tự đều được mã hóa bởi những số giống nhau trong ba kiểumã hóa, ngoại trừ ký hiệu PI được mã hóa khác (được in đậm trong kết quả ở trên). Đểmã hóa PI cần 2 byte, đòi hỏi này được UTF-8 hỗ trợ nên thể hiện được Π, trong khi đóASCII chỉ sử dụng một byte nên thay PI bằng mã 3F, đây là mã của dấu hỏi (?). Nếu chuyển các ký tự Unicode sang ASCII hoặc một kiểu mã hóa khác thì có thể mất dữ liệu. Bất kỳ ký tự Unicode nào có mã ký tự không biểu diễn được trong kiểu mã hóa đích sẽ bị bỏ qua khi chuyển đổi.Lớp Encoding cũng cung cấp phương thức tĩnh Covert để đơn giản hóa việc chuyển mộtmảng byte từ kiểu mã hóa này sang kiểu mã hóa khác không phải qua trung gian UTF-16.Ví dụ, dòng mã sau chuyển trực tiếp các byte trong mảng asciiString từ ASCII sang UTF-8:byte[] utf8String = Encoding.Convert(Encoding.ASCII, Encoding.UTF8, asciiString); 1.1 Chuyển các kiểu giá trị cơ bản thành mảng kiểu byte Bạn cần chuyển các kiểu giá trị cơ bản thành mảng kiểu byte. Lớp System.BitConverter cung cấp các phương thức tĩnh rất tiện lợi cho việc chuyển đổi qua lại giữa các mảng kiểu byte và hầu hết các kiểu giá trị cơ bản— trừ kiểu decimal. Để chuyển một giá trị kiểu decimal sang mảng kiểu byte, bạn cần sử dụng đối tượng System.IO.BinaryWriter để ghi giá trị đó vào một thể hiện System.IO.MemoryStream, sau đó gọi phương thức Memorystream.ToArray. Để có một giá trị decimal từ một mảng kiểu byte, bạn cần tạo một đối tượng MemoryStream từ mảng kiểu byte, sau đó sử dụng thể hiện System.IO.BinaryReader để đọc giá trị này từ MemoryStream.Phương thức tĩnh GetBytes của lớp BitConverter cung cấp nhiều phiên bản nạp chồngcho phép chuyển hầu hết các kiểu giá trị cơ bản sang mảng kiểu byte. Các kiểu được hỗtrợ là bool, char, double, short, int, long, float, ushort, uint, và ulong. Lớp BitConvertercũng cung cấp các phương thức tĩnh cho phép chuyển các mảng kiểu byte thành các kiểugiá trị chuẩn như ToBoolean, ToUInt32, ToDouble,... Ví dụ sau minh họa cách chuyểncác giá trị bool và int thành mảng kiểu byte, và ngược lại. Đối số thứ hai trongToBoolean và ToUInt32 cho biết vị trí (tính từ 0) trong mảng byte mà BitConverter sẽlấy các byte kể từ đó để tạo giá trị dữ liệu.byte[] b = null;// Chuyển một giá trị bool thành mảng kiểu byte và hiển thị.b = BitConverter.GetBytes(true);Console.WriteLine(BitConverter.ToString(b));// Chuyển một mảng kiểu byte thành giá trị bool và hiển thị.Console.WriteLine(BitConverter.ToBoolean(b,0));// Chuyển một giá trị int thành mảng kiểu byte và hiển thị.b = BitConverter.GetBytes(3678);Console.WriteLine(BitConverter.ToString(b));// Chuyển một mảng kiểu byte thành giá trị int và hiển thị.Console.WriteLine(BitConverter.ToInt32(b,0));Đối với kiểu decimal, lớp BitConverter không hỗ trợ, nên bạn phải sử dụng thêmMemoryStream và BinaryWriter.// Tạo mảng kiểu byte từ giá trị decimal.public static byte[] DecimalToByteArray (decimal src) { // Tạo một MemoryStream làm bộ đệm chứa dữ liệu nhị phân. using (MemoryStream stream = new MemoryStream()) { // Tạo một BinaryWriter để ghi dữ liệu nhị phân vào stream. using (BinaryWriter writer = new BinaryWriter(stream)) { // Ghi giá trị decimal vào BinaryWriter/MemoryStream. writer.Write(src); // Trả về mảng kiểu byte. return stream.ToArray(); } }}Để chuyển một mảng kiểu byte thành một giá trị decimal, sử dụng BinaryReader để đọctừ MemoryStream.// Tạo giá trị decimal từ mảng kiểu byte.public static decimal ByteArrayToDecimal (byte[] src) { // Tạo một MemoryStream chứa mảng. using (MemoryStream stream = new MemoryStream(src)) { // Tạo một BinaryReader để đọc từ stream. using (BinaryReader reader = new BinaryReader(stream)) { // Đọc và trả về giá trị decimal từ // BinaryReader/MemoryStream. return reader.ReadDecimal(); } }} Lớp BitConverter cũng cung cấp phương thức ToString để tạo một String chứa giá trị mảng. Gọi ToString và truyền đối số là một mảng byte sẽ trả về một String chứa giá trị thập lục phân của các byte trong mảng, các giá trị này cách nhau bởi dấu gạch nối, ví dụ “34-A7-2C”. Tuy nhiên, không có phương thức nào tạo một mảng kiểu byte từ một chuỗi theo định dạng này. 1.2 Mã hóa dữ liệu nhị phân thành văn bản Bạn cần chuyển dữ liệu nhị phân sang một dạng sao cho có thể được lưu trữ trong một file văn bản ASCII (chẳng hạn file XML), hoặc được gởi đi trong e- mail. Sử dụng các phương thức tĩnh ToBase64String và FromBase64String của lớp System.Converter để chuyển đổi qua lại giữa dữ liệu nhị phân và chuỗi được mã hóa theo Base64.Base64 là một kiểu mã hóa cho phép bạn mô tả dữ liệu nhị phân như một dãy các ký tựASCII để nó có thể được chèn vào một file văn bản hoặc một e-mail, mà ở đó dữ liệu nhịphân không được cho phép. Base64 làm việc trên nguyên tắc sử dụng 4 byte để chứa 3byte dữ liệu nguồn và đảm bảo mỗi byte chỉ sử dụng 7 bit thấp để chứa dữ liệu. Điều nàycó nghĩa là mỗi byte dữ liệu được mã hóa theo Base64 có dạng giống như một ký tựASCII, nên có thể được lưu trữ hoặc truy ...

Tài liệu được xem nhiều: