将字符转换为ASCII代码&在C ++ / CLI中反之亦然

时间:2013-11-23 06:46:25

标签: visual-studio-2010 character-encoding c++-cli type-conversion ascii

我目前正在学习c ++ / cli,我想将一个字符转换为ASCII码十进制,反之亦然(例如'A'= 65)。

在JAVA中,这可以通过简单的类型转换来实现:

   char ascci = 'A';
   char retrieveASCII =' ';
   int decimalValue;
   decimalValue = (int)ascci;
   retrieveASCII = (char)decimalValue;

显然这种方法在c ++ / cli中不起作用,这是我的代码:

   String^ words = "ABCDEFG";
   String^ getChars;
   String^ retrieveASCII;
   int decimalValue;

   getChars  =  words->Substring(0, 1);
   decimalValue = Int32:: Parse(getChars);
   retrieveASCII = decimalValue.ToString();

我收到此错误:

mscorlib.dll中出现'System.ArgumentOutOfRangeException'类型的第一次机会异常

其他信息:输入字符串的格式不正确。

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:1)

TextBox::Text属性中的字符属于System::String类型。因此,它们是Unicode字符。根据设计,Unicode字符集包括所有ASCII字符。因此,如果字符串只有这些字符,您可以转换为ASCII编码而不会丢失任何字符。否则,你必须有一个省略或替换字符或抛出异常的策略。

ASCII字符集在当前使用中有一个编码。它代表每个字节中的所有字符。

// using ::System::Text;

const auto asciiBytes = Encoding::ASCII->GetBytes(words->Substring(0,1));
const auto decimalValue = asciiBytes[0];   // the length is 1 as explained above

const auto retrieveASCII = Encoding::ASCII->GetString(asciiBytes);

十进制当然是数字的表示。除了你的解释,我没有看到你在哪里使用小数。如果你确实想在代码中使用它,它可能是这样的:

const auto explanation = "The encoding (in decimal) " 
                       + "for the first character in ASCII is " 
                       + decimalValue; 

请注意auto的使用。我省略了变量的类型,因为编译器可以解决它们。它允许代码更专注于概念而不是样板。另外,我使用const,因为我不相信“变量”的值应该改变。这些都不是必需的。

BTW-所有这些也适用于Java。如果您的Java代码有效,那只是出于巧合。如果它已被正确编写,那么很容易转换为.NET。 Java的StringCharset类具有与.NET StringEncoding类非常相似的功能。 (但是编码为正确的术语。)它们都使用Unicode字符集和UTF-16编码作为字符串。

答案 1 :(得分:1)

比你想象的更像Java

String^ words = "ABCDEFG";
Char first = words [0];
String^ retrieveASCII;
int decimalValue = ( int)first;
retrieveASCII = decimalValue.ToString();