将hex转换为byte而不进行转换

时间:2014-07-16 10:39:15

标签: c# hex bytearray

我有一个非常具体的要求。我有一些数据。其中,字符串和空格要转换为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分别转换为字节 任何人都可以帮我这个.. !!

2 个答案:

答案 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混合有点奇怪。