c# - 仅更新部分字符串并保持其余部分相同
问题描述
我有一个值“0x1FF40001”,我将其写入这样的寄存器,
myserial[0].write(0x807, 0x1FF40001);
但是现在固件说我写入寄存器 807 的值中有 4 个部分,“1F F4 00 01”,并且当前为“F4”(天线索引)的第二个半字节(32 位)可以通过用户输入和可以有 0-255(十进制)的值。目前说的值为4。
所以我将它添加到 Win Form 以通过这种方式输入 Antenna Index 的值:
//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));
要么,要么您需要使用循环遍历字符串内容并检查您希望更改的字符,然后将修改后的内容传递给新字符串并将新修改的字符串分配给旧字符串。这是您可以使用的一些选项的 链接。祝你好运!