2013-03-07 52 views
9

Đây có thể là một câu hỏi chưa trưởng thành, có thể đang thiếu cái gì nhưng câu hỏi của tôi làChar để int chuyển đổi để có được ASCII

Đang cố gắng chuyển đổi một char để int để có được những ASCII giá trị của char rằng, trong nhiều trường hợp Tôi nhận được mã số ASCII chính xác/dự kiến ​​cụ thể char, trong một số trường hợp tôi không làm như vậy. Ai đó có thể giải thích cho tôi tại sao?

Ví dụ:

// Example 1:- 

Console.WriteLine((int)'a'); 

// gives me 97 perfect! 

// Example 2:- 

Console.WriteLine((char)1); gives me ☺ 

// now 

Console.WriteLine((int)'☺'); 

// this should give me 1, instead it gives me 9786 why? 

này xảy ra với ASCII>127 hay ASCII < 32.

+0

Đây có thể là những gì bạn đang tìm kiếm: [link] (http://stackoverflow.com/questions/3665757/c-sharp-convert-char-to-int) – Brandon

+0

Tôi sẽ không tin tưởng nhân vật được hiển thị là một đại diện duy nhất của giá trị ký tự cơ bản, đặc trưng cho những ký tự giá trị thấp. – hatchet

Trả lời

12

\01 là ký tự không thể in được, vì bàn điều khiển kết quả là miễn phí để sử dụng bất kỳ thay thế nào để hiển thị nó.

Ngoài ra giao diện điều khiển Windows mặc định không phải là Unicode thân thiện, vì vậy những điều kỳ lạ xảy ra khi bạn in các ký tự bên ngoài phạm vi ASCII có thể in mặc định.

+0

Điều này Có vẻ như nó là gì, nhờ làm rõ – din

4

Thứ nhất, không có thứ như "ASCII> 127" - ASCII chỉ lên tới 127 (hoặc 126; Tôi không bao giờ có thể nhớ việc xóa có đúng là một phần của ASCII) hay không.

Về cơ bản khi bạn in các ký tự không in được, chẳng hạn như U + 0001 ("Bắt đầu tiêu đề"), tùy thuộc vào thiết bị hiển thị để xác định phải làm gì với điều đó. Một số bàn giao tiếp sẽ in hình vuông, một số sẽ in mặt cười, vv Bạn chắc chắn không nên mong đợi nó có thể đảo ngược. Bạn thể mong đợi việc chuyển đổi bản thân để có thể đảo ngược trong mã mặc dù:

char c = '\u0001'; 
int i = c; // i = 1 
char d = (char) i; 
Console.WriteLine(c == d); // True 
+0

Mở rộng mã ASCII http://www.asciitable.com/ – din

+1

@DineshB: Đó không phải là ASCII. "Extended ASCII" là một thuật ngữ * khủng khiếp * thường có nghĩa là "bất kỳ mã hóa một byte nào tương thích với ASCII lên đến 127." Xem http://en.wikipedia.org/wiki/ASCII - "ASCII bao gồm các định nghĩa cho 128 ký tự" –

+0

Gotchu, lỗi của tôi sau đó báo giá nó là ASCII – din

1

Trong câu trả lời cho câu hỏi của bạn, tại sao Console.WriteLine((int)'☺'); trở lại 9786, đó là vì '☺' trong Unicode được đại diện bởi byte 58 38, được đại diện bởi một số nguyên là 9786.

Ký tự trong C# là ký tự Unicode.

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