我有一个非常具体的要求。我有一些数据。其中,字符串和空格要转换为EBCDIC,而数字要转换为十六进制
例如,我的字符串是“Test123”
测试=> EBCDIC
123 =>十六进制。
我想要做的是检查字符串中的每个字符(如果是否为数字),然后根据进行转换的字符进行检查。
byte[] dataBuffer = new byte[length];
int i = 0;
if (toEBCDIC)
{
foreach (char c in data)
{
byte[] temp = new byte[1];
if (Char.IsNumber(c))
{
string hexValue = Convert.ToInt32(c).ToString("X");
temp = Encoding.ASCII.GetBytes(hexValue);
dataBuffer[i] = temp[0];
}
else
{
temp = Encoding.GetEncoding("IBM01140").GetBytes(c.ToString());
dataBuffer[i] = temp[0];
}
i++;
}
dataBuffer.CopyTo(array, byteIndex);
当我尝试转换数字时出现问题。我需要将输出保存在字节数组中,因为我必须将输出写入内存流然后写入文件
当我得到数字的十六进制值,然后尝试将其转换为字节时,实际转换发生
对于“1”,十六进制值= 31.
现在我想保持31字节不变。我的意思是说,当我把它写到字节数组时,它应该只保留31。但是当GetBytes时,它会生成字节数组,将3和1分别转换为字节
任何人都可以帮我这个.. !!
答案 0 :(得分:0)
您将char转换为其代码,然后将该代码转换为字符串。您不必执行第二步,而是直接使用代码:
if (Char.IsNumber(c))
{
byte hexValue = Convert.ToByte(c);
dataBuffer[i] = hexValue;
}
答案 1 :(得分:0)
问题在于:
ToString("X")
现在它是十六进制字符串。所以在你的例子中,从这一点开始,3和1已经分开了。
如何解决此问题:请勿转换。
if (Char.IsNumber(c))
{
dataBuffer[i] = (byte)c;
}
未经测试。我想这就是你想要的。至少,这就是你在最后一段中描述的内容。这不会使数字十六进制 - 它会使它们成为ASCII,并且将它与EBCDIC混合有点奇怪。