2013-04-12 36 views
8

Tôi có một mảng byte. Giá trị 8 bit của mỗi byte là những gì tôi muốn làm các ký tự trong chuỗi của tôi. Bạn có thể nghĩ về các giá trị 8 bit của tôi như ASCII, ANSI, UTF-8, ISO-8859-1, các chỉ số nhiệt độ hàng ngày, khoảng cách tính bằng inch từ một điểm trên một đường hoặc bất kỳ thứ gì bạn muốn. Nó không liên quan.Cách chuyển đổi byte [] thành Chuỗi không mã hóa, không mất dữ liệu

Khi tôi hoàn tất. char tại vị trí N trong chuỗi của tôi phải có cùng giá trị với byte tại vị trí N. Tức là, 8 bit bậc cao phải là 0 và thứ tự thấp 8 bit phải giống như byte nguồn.

Tôi sử dụng Mã hóa nào để chỉ đơn giản là ánh xạ byte thành ký tự mà không có thay đổi?

+0

Chỉ cần tò mò cần thiết cho điều này là gì. Chuỗi ký tự đó sẽ không hữu ích - nó sẽ không thể sử dụng để hiển thị hoặc in ấn, và có lẽ sẽ không đặt độc đáo với bất kỳ hệ thống bên ngoài nào. Tại sao chuyển đổi nó từ các byte? –

+0

@JoeEnos tại sao chuỗi không thể sử dụng được để hiển thị hoặc in? Tùy thuộc vào dữ liệu trong mảng byte, nó có thể rất tốt. – phoog

+0

@JoeEnos, mục đích của các câu hỏi như tôi đã làm là cố gắng giữ cho không nhận được một loạt các "tại sao bạn làm điều này?" và "cần phải bỏ qua mã hóa là một lá cờ đỏ cho thấy giải pháp của bạn chỉ là" câu trả lời sai ". Câu hỏi đặt ra là vấn đề của tôi, hay đơn giản là làm thế nào để biến một mảng byte thành một chuỗi mà không có tất cả những kẻ thông minh ở Microsoft đang trộn dữ liệu của tôi bởi vì họ nghĩ rằng họ biết rõ hơn tôi làm những gì tôi đang cố gắng làm. :-) – Craig

Trả lời

14

Đối với yêu cầu này, tôi sẽ phân chia bằng mã hóa, bởi vì tôi không biết chi tiết về những gì họ làm và chỉ chuyển đổi các byte của chính tôi.

string Convert(byte[] data) 
{ 
    char[] characters = data.Select(b => (char)b).ToArray(); 
    return new string(characters); 
} 
+0

Đây thực chất là những gì tôi đang làm nhưng đã gây ra lỗi ở một nơi khác che giấu thành công của tôi. :-) – Craig

+1

Còn cách khác thì vui lòng? làm thế nào để chuyển đổi chuỗi được tạo ra bởi phương pháp này trở lại mảng byte? – MaxOvrdrv

+0

Nhiều tùy chọn. Cái có gõ ít nhất: 's.ToCharArray(). Chọn (c => (byte) c) .ToArray();' - trong đó s là chuỗi. Lưu ý rằng giải pháp này phụ thuộc vào giả định, hợp lệ cho câu hỏi ban đầu, rằng tất cả các ký tự nằm trong khoảng từ 0 đến 255. Trong các ngữ cảnh khác, bạn sẽ cần phải sử dụng mã hóa văn bản. – phoog

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