如何以十六进制形式读取字符/字符串?

时间:2018-10-05 06:15:40

标签: c#

用户正在文本框中输入频率,我正在将其作为字符串读取。 然后将频率转换为其等效的十六进制。 现在,我想阅读freqhex的最后两个元素,并将它们连接起来并存储为字节。 对于前。如果用户输入频率282.000 MHz。 FreqHex将存储00044D90。我想读取“ 90”并存储为字节。 SS_Buf [15]应该将90存储为字节。

string frequency = freq_box.Text;
byte[] SS_Buf = new byte[117];
string FreqHex = Convert.ToString(int.Parse(frequency), 16);
SS_Buf[15] = byte (FreqHex[6]+FreqHex[7]); // trying to store as byte, it's not correct

嗨,实际上完整的代码是这样的:

string frequency = freq_box.Text;
        string[] strArr = null;
        strArr = frequency.Split('.');
        string FreqHex = Convert.ToString(int.Parse(strArr[0]+strArr[1]), 16);
        while(FreqHex.Length<8)
        {
            FreqHex = "0"+FreqHex;

        }

SS_Buf [15] =(byte)(FreqHex [6] + FreqHex [7]);

用户将输入xxx.xxx这样的频率 我想使用xxxxxx转换为十六进制。如果位数少于8,我将在前面附加0。 就像十六进制的第二个恭维一样。 因此,我在考虑是否可以使用“ FreqHex”代替“频率”将值存储在SS_Buf [15]中 。如果十六进制值为00044D90: SS_Buf [15]应该为90,SS_Buf [14]应该为4D,SS_Buf [13]应该为04,    SS_Buf [12]应该为00

1 个答案:

答案 0 :(得分:4)

实际上没有必要转换为十六进制。您只需要一点掩蔽。请注意,所有内容似乎都用二进制表示,尽管看起来可能不是这样。

要获取最后两个十六进制数字,基本上就是获取最右边的最后8位。为此,请应用0xff(二进制1111 1111)的掩码,并使用按位AND运算符:

SS_Buf[15] = (byte)(Convert.ToInt32(frequency) & 0xff)

如果frequency为44D90(十六进制),则为

0100 0100 1101 1001 0000

以二进制格式

现在我们应用0xff的掩码,即

0000 0000 0000 1111 1111

现在,如果我们执行按位与运算,我们将得到:

0000 0000 0000 1001 0000