我有一个值“ 0x1FF40001”,我这样写到寄存器中,
myserial[0].write(0x807, 0x1FF40001);
但是现在固件说,该值中有4个部分,我将其写入寄存器807“ 1F F4 00 01”,并且当前为“ F4”(天线索引)的第二个半字节(32位)可以由用户更改输入,并且可以具有0-255(十进制)的值。表示当前值为4。
因此,我将其添加到Win窗体中,以这种方式输入天线索引的值:
//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);
您无法按索引更改字符串的单个字符,可以对其他字符串选项进行硬编码,然后在用户输入数字时切换字符串(您需要将索引引用传递给事件)。这是一个假设的情况:
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。祝你好运!