0

我目前学习C++/CLI和我想将字符转换为其ASCII码小数,反之亦然(例如,“A” = 65)。将字符转换成ASCII码及反之亦然C++/CLI

在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'的第一次机会异常

附加信息:输入字符串格式不正确。

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

+0

请解释一下你想要得到什么结果。 –

+0

我需要找到给定字符的ASCII代码,我从文本框中获取字符,并且需要将它们转换为它们的ASCII代码,然后将其显示在labelBox上。 – Arsaceus

+0

'char ascci ='A'; int n =(int)ascii;' –

回答

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编码字符串。

+0

谢谢汤姆,这正是我一直在寻找的! – Arsaceus

1

更多类似Java的比你想象的

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