用户正在文本框中输入一个频率,我正在读取它作为一个字符串。 然后将频率转换为其等效的十六进制。 现在我想读取 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]);
用户会像这样输入freq 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
最佳答案
其实不需要转成十六进制。你只需要一点掩蔽。请注意,一切都以二进制表示,尽管它可能看起来不像。
获取最后两个十六进制数字基本上是获取最后最右边的 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
关于c# - 如何将字符/字符串读取为十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52659352/