【问题标题】:How to read a char/string as hex?如何将字符/字符串读取为十六进制?
【发布时间】:2018-10-05 06:15:39
【问题描述】:

用户在文本框中输入频率,我将其读取为字符串。 然后将频率转换为其十六进制等效值。 现在我想读取 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] = (字节)(FreqHex[6]+FreqHex[7]);

用户会像这样输入freq xxx.xxx 我想使用 xxxxxx 转换为十六进制。如果位数小于 8,我会在前面附加 0。 这就像十六进制签名的第二个恭维。 所以,我在想是否可以使用 'FreqHex' 而不是 'frequency' 在 SS_Buf[15] 中存储值 .如果十六进制值为 00044D90: SS_Buf[15] 应该是 90,SS_Buf[14] 应该是 4D,SS_Buf[13] 应该是 04, SS_Buf[12] 应该是 00

【问题讨论】:

    标签: c#


    【解决方案1】:

    实际上不需要转换为十六进制。你只需要一点掩蔽。请注意,所有内容都以二进制表示,尽管它可能看起来不像。

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

    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
    

    【讨论】:

    • 你好,其实完整的代码是这样的:string frequency = freq_box.Text;字符串[] strArr = null; strArr = 频率.Split('.');字符串 FreqHex = Convert.ToString(int.Parse(strArr[0]+strArr[1]), 16); while(FreqHex.Length
    • @JyotiYadav 您不需要 while 循环。就做(byte)(Convert.ToInt32(strArrr[0] + strArr[1]) &amp; 0xff)
    • 更一般地,可以将按位和 (&amp;) 视为“保存这些位”运算符。在 x = x&amp;y 的情况下,也写为 x&amp;=y ,设置为 1 的 y 的每个位将保留 x 中相应位的值,无论是 1 还是 0。x 的所有其他位将设置为0. 正如@Sweeper 所展示的,此运算符是一种非常有效的方法,可以通过保留子序列并取消其余部分来隔离位序列的各个部分。
    • @JyotiYadav no 不要使用frequency,将其替换为strArr[0] + strArr[1]
    • @JyotiYadav 这是另一个问题。您首先将整个位模式向右移动 8 次,然后应用相同的掩码,您将获得 4D。
    猜你喜欢
    • 2019-07-27
    • 2018-01-31
    • 1970-01-01
    • 2013-02-07
    • 2017-08-23
    • 2014-03-19
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多