字符串长度必须正好一个字符
我认为这是一个简单的问题。 由于某种原因,以下代码生成exception,“字符串必须正好一个字符长”。
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[n] = Convert.ToChar(hexOutput);
线。 为什么会这样? 当我检查CharMsg
的值时,它似乎正确地包含了所有这些值,但仍然向我抛出错误。
更新:我已经解决了这个问题,这是我的错误。 对不起,打扰你。
好吧,这对我来说是一个非常愚蠢的错误。 点是,我的问题我甚至不应该这样做,因为hex值显然不会以任何方式帮助我。
我试图用它来加密图像中的消息。 我已经在第一个像素的每个颜色通道上的最后几位加密了所述消息的长度。 现在我想把信息放在那里。 我在这里看到: http : //en.wikipedia.org/wiki/ASCII并且在没有想到usung hexes会是一个好主意的情况下对自己说。 不能相信我以为。
Convert.ToChar( string s )
, 根据文档需要单个字符串,否则它会抛出FormatException
如您所述。 这是一个粗略的,但更具限制性,相当于
public char string2char(string s){return s [0]; }
您的代码执行以下操作:
你究竟想在这里完成什么? 例如,给定一个由3个字符组成的charMsg
,’a’,’b’和’c’,应该发生什么。 明确的问题陈述有助于我们为您提供帮助。
由于可打印的unicode字符可以在0x0000
到0xFFFF
范围内的任何位置,因此您的hexOutput变量可以包含多个字符 – 这就是抛出错误的原因。 Convert.ToChar(string)
总是检查字符串的长度a,如果它不等于1 – 它会抛出。 所以它不会将字符串0x30
转换为hex数字,然后转换为ascii表示,符号0
。
你能详细说明你想要达到的目的吗?
你的hexOutput是一个字符串,我假设charMsg是一个字符数组。 假设charMsg中的第一个元素是’p’或hex值70. Convert.ToChar(string)的文档说它只使用字符串的第一个字符(’7’),但它是错误的。 它会抛出这个错误。 您可以使用静态示例对此进行测试,例如charMsg[n] = Convert.ToChar("70");
。 你会得到同样的错误。
您是否尝试使用hex值替换字符? 如果是这样,您可以尝试使用StringBuilder对象而不是arrays分配。
Convert.ToChar(string)如果是空字符串导致此错误。 改为使用cchar()
上述就是C#学习教程:字符串长度必须正好一个字符分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1006268.html