2010-05-27 31 views
6

Giả sử tôi muốn sử dụng ký tự đặc biệt ASCII FS (0x1C) trong một chuỗi .Net, và sau đó có thể định dạng một mảng byte từ cùng chuỗi đó với ký tự đặc biệt được biểu diễn đúng như một byte, tôi sẽ làm như thế nào? Tôi dường như không thể có được đầu của tôi xung quanh nó.Cách viết các ký tự đặc biệt ASCII vào một chuỗi .Net

Cảm ơn bạn đã giúp đỡ bất kỳ.

+0

Trước khi trả lời câu hỏi của bạn, tôi sẽ quan tâm để biết lý do tại sao bạn đang cố gắng chuyển đổi chuỗi thành một mảng byte. –

+0

Tôi đang viết một chức năng sẽ phân tích một mảng byte đến từ một cổng nối tiếp, nhưng tôi làm việc mù tại thời điểm này và không có bất kỳ dữ liệu thực tế để kiểm tra với. Vì tôi có tài liệu cho thấy định dạng tôi có thể tạo dữ liệu của riêng mình và tôi chỉ muốn viết nó thành chuỗi .Net, chuyển đổi thành mảng byte và sau đó phân tích cú pháp bằng cách sử dụng hàm của tôi. Nhưng có lẽ có một cách tốt hơn. Tôi cũng mở để gợi ý về điều đó. – JimDaniel

Trả lời

3

Nó khá phụ thuộc vào bản chất của các định dạng cổng dữ liệu nối tiếp. Nếu dữ liệu bao gồm hầu hết các ký tự văn bản ASCII xen kẽ với ký tự điều khiển không thường xuyên, thì bạn có thể nhúng chúng vào chuỗi, ví dụ:

var data1 = Encoding.ASCII.GetBytes("Foo\x1CBar\x1CBaz"); 

Tuy nhiên, nếu dữ liệu bao gồm nhiều trường dữ liệu khác nhau, thì lớp học BitConverter có thể hữu ích hơn, ví dụ:

var data2 = new List<byte>(); 
// Add an int value 
data2.AddRange(BitConverter.GetBytes(6)); 
// Add a control character 
data2.Add(0x1C); 
// Add an ASCII-encoded string value 
data2.AddRange(Encoding.ASCII.GetBytes("Hello")); 

Như những người khác đã chỉ ra, ASCII không phải là mã hóa chuỗi duy nhất bạn có thể sử dụng, nhưng từ cổng nối tiếp, có nhiều khả năng nhất.

+0

Cảm ơn, BitConverter sẽ hữu ích trong tình huống của tôi. – JimDaniel

3

Dưới đây là làm thế nào để nhúng nó trong một chuỗi:

"\x1C" 

là chuỗi đại diện của nhân vật duy nhất. Giả sử bạn muốn để có được nó ra như một mảng byte:

byte[] bytes = Encoding.ASCII.GetBytes("\x1C"); 

Và nếu bạn muốn để có được một chuỗi từ một mảng byte:

string s = Encoding.ASCII.GetString(bytes); 

Hãy nhận biết rằng có cũng nhiều mã hóa, giống như UTF8, trong không gian tên Encoding có thể hoạt động tốt hơn tùy thuộc vào neeed của bạn - mặc dù đọc từ một dòng nối tiếp bạn có thể muốn ASCII đơn giản.

+0

Đó là những gì tôi đã mất tích, cảm ơn! – JimDaniel

1

Bạn nên xem lớp ASCIIEncoding http://msdn.microsoft.com/en-us/library/system.text.asciiencoding.aspx Nếu bạn muốn xử lý ASCII. Các chuỗi .Net là unicode (UCS2). Nếu bạn muốn một mã hóa cụ thể, bạn cần phải sử dụng một trong các lớp mã hóa.

Bạn có thể nhúng một nhân vật không thể in được bằng cách thoát khỏi nó "My chuỗi \ x1c"

Các vấn đề liên quan