0

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

我需要传递一个无符号字符数组,它有 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。

所以我的问题是,如何在无符号字符上翻译这些输入中的每一个,以便我可以在我的 sRequest 变量上设置它?

在此先感谢(感谢戴夫,将字节错误输入位,现已修复)

4

1 回答 1

0

实际上,我根本不会使用自由格式的文本输入来做到这一点 - 进行验证会太麻烦(本质上是懒惰的)。如果有机会限制您的用户能够尽早为您提供的内容,您应该接受它:-)

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

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

对于列表框中的值,我会将项目数据设置为 0 到 15(包括 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(以及可能的前导/尾随空格等),这就是为什么我建议将限制性路线作为更好的选择。

于 2011-08-22T03:14:05.020 回答