2014-04-04 62 views
2

我有以下代碼:鑄造字符到整數給人意外的值

var stringNumber = 93.ToString(CultureInfo.InvariantCulture); 
var stringArray = stringNumber.ToCharArray(); 
var intArray = stringArray.Select(x => (int)x).ToArray(); 

什麼我希望intArray包含的值93而是它包含5751,我不知道爲什麼?我如何獲得intArray以包含預期值?

+0

HTTP:// WW w.asciitable.com/ –

+0

您正在將'char'轉換爲其數字表示形式。這將帶給你它的ASCII碼。 –

回答

6

因爲,默認情況下,將字符轉換爲整數將返回該字符的ASCII值。

你可以使用int.Parse()代替:

var stringNumber = 93.ToString(CultureInfo.InvariantCulture); 
var stringArray = stringNumber.ToCharArray(); 
var intArray = stringArray.Select(x => int.Parse(x)).ToArray(); 
1

因爲您將'9' char轉換爲int代碼rapresentation

stringArray.Select(x => int.Parse(x)).ToArray(); 
2

您鑄造charnumeric representation。試試這個使用int.Parse()

var stringNumber = 93.ToString(CultureInfo.InvariantCulture); 
var stringArray = stringNumber.ToCharArray(); 
var intArray = stringArray.Select(x => int.Parse(x)).ToArray(); 
1
var intArray = stringArray.Select(x => int.Parse(x)).ToArray(); 
1

這是因爲這是ASCII code 3和9

這是正確的轉換,您是剛開始的字符代碼。嘗試

int.Parse(x) 
1

試試這個:

const int offset = (int) '0'; 
var intArray = stringArray.Select(x => ((int) x) - offset).ToArray(); 

與您的代碼的問題是,char值在內部用整數表示。但是,該整數值是該字符的代碼,而不是該字符轉換爲整數的值。例如字符0的代碼是整數48,根據ASCII character table

上面的代碼採用字符'0'的值,並將其從數組的字符值中減去。這是有效的,因爲在ASCII數字中按順序存儲 - 從09的數字從代碼48擴展到代碼57。減去零的代碼值,將基本上產生你想要的結果。這種方法的好處是,它不依賴於你使用的默認編碼(儘管我不知道是否有一個不遵循ASCII字符順序的編碼),並且你不需要記住自己的字符代碼。

3

您可以使用Char.GetNumericValue,如:

int[] intArray = 93.ToString() 
       .ToCharArray() 
       .Select(r=> (int) char.GetNumericValue(r)) 
       .ToArray(); 

如果您的號碼是int你可以看看this answer說明如何得到int陣列,而不將其轉換爲字符串。

+3

+1。我一直在使用.NET多年,並且從未遇到或使用'char.GetNumericValue'方法。學習新東西總是很好的。 –

2

你得到57,而不是9,因爲鑄造一個char爲int將得到字符的十進制值

9根據這個編碼http://www.fileformat.info/info/unicode/char/0039/index.htm

3是51 57根據這個編碼(下同)

要獲得焦炭的實際值必須解析值爲int int.Parse(x)

 var stringNumber = 93.ToString(CultureInfo.InvariantCulture); 
     var stringArray = stringNumber.ToCharArray(); 
     var intArray = stringArray.Select(x => int.Parse(x)).ToArray();