CString写为unsigned char

时间:2011-08-22 03:05:39

标签: vc90

我正在构建一个读取和写入微芯片内存的应用程序。

我需要传递一个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,错误的字节为位,现在修复)

1 个答案:

答案 0 :(得分:0)

实际上,我根本不会使用自由格式文本输入 - 进行验证(本身就是懒惰)太麻烦了。如果有机会限制用户能够尽早给你的东西,你应该接受: - )

我会为值提供下拉框,每个nybble以便选择的数量不会太繁重。喜欢的东西(并为我的图形技能道歉):

               +---+-+  +---+-+  +---+-+  +---+-+
Enter value 0x | 0 |V|  | 0 |V|  | 0 |V|  | 4 |V|
               +---+-+  +---+-+  +---+-+  +---+-+
               |>0<|
               | 1 |
               | 1 |
               | 2 |
               | 3 |
               : : :
               | E |
               | F |
               +---+

对于列表框中的值,我会将项目数据设置为0到15(包括项目0F)。

这样,您可以获得单字节值,例如:

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(以及可能的前导/尾随空格等),这就是为什么我建议将限制性路线作为更好的选择。