1

これに少し固執しています。USB 経由で外部デバイスに書き込まれる 0x00 から 0x3F の範囲の値を保持する PORTBhex という変数があります。私が抱えている問題は、このコードに値を取得することです:

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

             }
        }

今問題は、私が持っている値が、以下を使用して16進数に変換される整数であることです:

 public static string ToHex(this int value)
{
    return string.Format("0x{0:X}", value);
}

値は整数として始まり、16 進数に変換されますが、変換された値を間違った型として使用できません。型「文字列」を「バイト」に暗黙的に変換できません。

これを回避するために何ができるか考えてください。

ありがとう

編集:

私が達成しようとしていることを十分に説明していない可能性があると思います.0〜255の範囲の値を保持するint変数があり、これを16進数に変換する必要があります。 outputBuffer[2] をその値に設定して、マイクロコントローラに送信します。

整数変数には、変換する前にいくつかの計算が実行されるため、バイト変数のみを使用することはできず、後で16進バイトに変換する必要があります。ありがとう

4

2 に答える 2

1

PORTBhex解決策は、タイプに変更し、そのメソッドをまったくbyte使用しないことです。ToHex

これを使用する代わりにIO.PORTBhex = ToHex(yourIntValue)

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

yourIntValue型も作っていただけるとなお良いですbyte

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

個人的には、そもそもここで文字列を避けて、byte

于 2013-04-10T09:36:38.980 に答える