仅更新一部分字符串,其余部分保持不变

问题描述 投票:0回答:1

我有一个值“ 0x1FF40001”,我这样写到寄存器中,

myserial[0].write(0x807, 0x1FF40001);

但是现在固件说,该值中有4个部分,我将其写入寄存器807“ 1F F4 00 01”,并且当前为“ F4”(天线索引)的第二个半字节(32位)可以由用户更改输入,并且可以具有0-255(十进制)的值。表示当前值为4。

因此,我将其添加到Win窗体中,以这种方式输入天线索引的值:

enter image description here

//In Form1.Designer.cs
this.Antenna_index_box.TextChanged += new System.EventHandler(this.Antenna_index_box_TextChanged);

//In Form1.cs
private void Antenna_index_box_TextChanged(object sender, EventArgs e)
        {
            uint[] ant_index = Antenna_index_box.Text;
            Ant_indx = ant_index;    //Ant_indx is a global variable so that I may pass it
        }

现在,如何在写入之前仅更改该字符串的一部分? Ant_indx的用户输入现在位于全局变量Ant_indx中。

myserial[0].write(0x807, Ant_indx);

我只想更改字符串0x1F“ F4” 0001中的“ F4”,其余的保持不变。

如果用户输入4,我应该将807编程为0x1F040001

如果用户输入25,则我应该将807编程为0x1F1D0001

我如何仅单独更改那些位?

myserial[0].write(0x807, Ant_indx);   // both arguments have to be uint32

编辑:我是这样实现的:

     UInt32 special_register_value = 0x1FF00001;
     special_register_value |= (Ant_indx << 16);
     serial[0].write(0x807, special_register_value);
c# c#-4.0
1个回答
0
投票

您无法按索引更改字符串的单个字符,可以对其他字符串选项进行硬编码,然后在用户输入数字时切换字符串(您需要将索引引用传递给事件)。这是一个假设的情况:

    int antennaIndex;
    switch (antennaIndex) {

        case 4: ant_index = "1F040001"; break;
        case 25: ant_index = "1F1D0001" break;
    }

    Ant_Index = ant_index;
    myserial.write(0x807, Convert.ToUInt32(Ant_Index, 16));

或者,您需要循环遍历字符串内容并检查要更改的字符,然后将修改后的内容传递给新字符串,并将新修改后的字符串分配给旧字符串。这是您可以使用的某些选项的link。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.