我正在构建一个读取和写入微芯片内存的应用程序。
我需要传递一个unsigned char数组,它有4个固定字节和2个可变字节,所以我希望读取内存库0004我将通过
unsigned char sRequest[32]={0};
sRequest[0] = 0x02; //FIXED
sRequest[1] = 0x1F; //FIXED
sRequest[2] = 0x0A; //FIXED
sRequest[3] = 0x20; //FIXED
sRequest[4] = 0x00; //VARIABLE
sRequest[5] = 0x04; //VARIABLE
我想为用户输入2个CEdit框来输入该变量存储区,因此它会在第一个CEdit上写入0x00,在第二个CEdit上写入0x04。
所以我的问题是,如何在unsigned char上翻译这些输入中的每一个,以便我可以在sRequest变量上设置它?
提前谢谢 (感谢dave,错误的字节为位,现在修复)答案 0 :(得分:0)
实际上,我根本不会使用自由格式文本输入 - 进行验证(本身就是懒惰)太麻烦了。如果有机会限制用户能够尽早给你的东西,你应该接受: - )
我会为值提供下拉框,每个nybble以便选择的数量不会太繁重。喜欢的东西(并为我的图形技能道歉):
+---+-+ +---+-+ +---+-+ +---+-+
Enter value 0x | 0 |V| | 0 |V| | 0 |V| | 4 |V|
+---+-+ +---+-+ +---+-+ +---+-+
|>0<|
| 1 |
| 1 |
| 2 |
| 3 |
: : :
| E |
| F |
+---+
对于列表框中的值,我会将项目数据设置为0到15(包括项目0
到F
)。
这样,您可以获得单字节值,例如:
byte04 = listboxA.GetItemData(listboxA.GetCurSel()) * 16 +
listboxB.GetItemData(listboxB.GetCurSel());
byte05 = listboxC.GetItemData(listboxC.GetCurSel()) * 16 +
listboxD.GetItemData(listboxD.GetCurSel());
如果必须使用限制较少的输入法,C ++提供:
int stoi (const string& str, size_t *idx = 0, int base = 10);
(和stol/stoul
用于有符号和无符号长整数),允许您将C ++字符串转换为整数类型。
为了您的目的。您可能必须检测并去除前导0x
(以及可能的前导/尾随空格等),这就是为什么我建议将限制性路线作为更好的选择。