C#将十六进制字符串转换为字节

时间:2013-04-10 09:30:40

标签: c#

有点困在这上面,我有一个名为PORTBhex的var,其值为0x00到0x3F,通过USB写入外部设备。我遇到的问题是将值放入这段代码中:

public bool PORTBwrite()
        {
            Byte[] outputBuffer = new Byte[65];
            outputBuffer[0] = 0;
            outputBuffer[1] = 0x00; //Command tells PIC18F4550 we want to write a byte

            outputBuffer[0] = 0;
             //Must be set to 0

            outputBuffer[2] = IO.PORTBhex;
                 //Hex value 0x00 - 0x3F to write to PORTB
                 //above line gives the error cannot implicity convert string - byte
                 //IO.PORTBhex is returned from the code in second snippet

            if (writeRawReportToDevice(outputBuffer))
             {
                 return true; //command completed OK

             }else{

                 return false; //command failed .... error stuff goes here

             }
        }

现在问题是我的值是一个整数,使用:

转换为十六进制
 public static string ToHex(this int value)
{
    return string.Format("0x{0:X}", value);
}

该值以整数开始并转换为十六进制但是我不能使用转换后的值作为我得到的错误类型无法将类型'string'隐式转换为'byte'。

知道我可以做些什么来解决这个问题吗?

由于

编辑:

我想我可能很难描述我想要实现的目标,我有一个int变量,其值为0-255,我必须转换为Hex,必须格式化为0x00到0xFF然后将outputBuffer [2]设置为该值以发送到微控制器。

整数var在需要转换之前对它执行了一些数学运算,所以我不能单独使用字节变量,之后必须转换为十六进制字节。 感谢

2 个答案:

答案 0 :(得分:1)

解决方案是将PORTBhex更改为byte类型,并且根本不使用ToHex方法:

而不是IO.PORTBhex = ToHex(yourIntValue)使用此:

IO.PORTBhex = checked((byte)yourIntValue);

如果你能使yourIntValue成为byte类型,情况会更好。

答案 1 :(得分:0)

outputBuffer[2] = Convert.ToByte(IO.PORTBhex, 16);

虽然我个人可能会首先尝试避免使用字符串,只存储byte