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
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 ...
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ìm kiếm theo từ khóa liên quan:
công nghệ thông tin kĩ thuật lập trình ngôn ngữ lập trình ngôn ngữ C# C# Thao tác Dữ liệu phần 2Gợi ý tài liệu liên quan:
-
52 trang 429 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 310 0 0 -
74 trang 294 0 0
-
96 trang 289 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 288 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 277 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 271 0 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 271 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 269 1 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 261 0 0