1

对此有点卡住,我有一个名为 PORTBhex 的变量,其值在 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);
}

该值以整数开始并转换为十六进制但是我不能使用转换后的值作为我得到的错误类型不能将类型“字符串”隐式转换为“字节”。

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

谢谢

编辑:

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

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

4

2 回答 2

1

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

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

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

如果你也能做成yourIntValuetype就更好byte了。

于 2013-04-10T09:33:33.760 回答
0
outputBuffer[2] = Convert.ToByte(IO.PORTBhex, 16);

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

于 2013-04-10T09:36:38.980 回答