我有一个我认为很简单的问题。由于某种原因,以下代码生成异常“字符串必须恰好是一个字符长”。
int n = 0;
foreach (char letter in charMsg)
{
// Get the integral value of the character.
int value = Convert.ToInt32(letter);
// Convert the decimal value to a hexadecimal value in string form.
string hexOutput = String.Format("{0:X}", value);
//Console.WriteLine("Hexadecimal value of {0} is {1}", letter, hexOutput);
charMsg[n] = Convert.ToChar(hexOutput);
n++;
}
异常发生在charMsg[n] = Convert.ToChar(hexOutput);
线。为什么会发生这种情况?当我检查的值CharMsg
它似乎正确地包含了所有这些内容,但仍然向我抛出错误。
UPDATE:我已经解决了这个问题,这是我的错误。对不起,打扰你。
好吧,这对我来说是一个非常愚蠢的错误。重点是,对于我的问题,我什至不应该这样做,因为十六进制值显然不会以任何方式帮助我。
我正在尝试做的是加密图像中的消息。我已经对第一个像素的每个颜色通道的最后一位数字中的所述消息的长度进行了加密。现在我正试图把这个信息放在那里。我看这里:http://en.wikipedia.org/wiki/ASCII http://en.wikipedia.org/wiki/ASCII我不假思索地对自己说,使用六角形是个好主意。不敢相信我这么想。
Convert.ToChar( string s )
, 根据文档 http://msdn.microsoft.com/en-us/library/5f3ew98y.aspx需要单个字符串,否则会抛出FormatException
正如你所指出的。这是一个粗略的,但更严格的等价物
公共 char string2char( 字符串 s )
{
返回 s[0] ;
}
您的代码执行以下操作:
- 迭代某些可枚举字符集合中的所有字符。
- For each such character, it...
- 将 char 转换为 int。Hint: a
char
是整数类型:它是一个无符号的 16 位整数值。
- 将该值转换为包含相关字符的十六进制表示形式的字符串。对于大多数字符,该字符串的长度至少为两个字符:例如,以这种方式转换空格字符('',0x20)将为您提供字符串“20”。
- 然后,您尝试将其转换回字符并替换当前正在迭代的项目。这是抛出异常的地方。这里您应该注意的一件事是,更改正在枚举的集合可能会导致枚举器引发异常。
您到底想在这里完成什么?例如,给定一个charMsg
由 3 个字符“a”、“b”和“c”组成,应该发生什么。清晰的问题陈述有助于我们为您提供帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)