c# - 如何将字符/字符串读取为十六进制?

标签 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]);

用户会像这样输入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/

相关文章:

c# - 回发 HTML5 中丢失的内容

c# - DirectoryEntry.Invoke() 在 "ChangePassword"调用时抛出错误

c# - 两个带有 "same name"的 csProj 程序集导致问题

c# - 将数字字符串拆分为单位数和两位数的可能组合

c# - Entity Framework - 在分离状态下保存对相关对象的更改

c# - 此方法在哪个线程上运行? C#

c# - 将组合框显示文本设置为 ObservableCollection<T> 的属性

c# - 从 C# 中的 xml 读取闭合标签

c# - 我可以设置动态生成控件的 Desired ClientID

c# - 如何用相同的重复事件重构两个类?