CString写为一个无符号字符
问题描述:
我正在构建一个应用程序来读取和写入微芯片的内存。CString写为一个无符号字符
我需要通过具有4个固定的字节和2个可变字节,因此suposing我想读存储器组0004无符号的字符阵列I将通过
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,在第二个上写0x04。
所以我的问题是,如何将这些输入中的每一个都转换为无符号字符,以便我可以将其设置在我的sRequest变量上?
在此先感谢 (感谢戴夫,输入错误字节为位,现在固定)
答
其实,我也不会做,与自由格式的文本输入的话 - 这将是太多的打扰做验证(本质上是懒惰)。如果有机会尽可能早的限制你的用户能够给你的东西,你应该采取:-)
我会提供值的下拉框,每个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);
(对于已签名和未签名的long,则为stol/stoul
),以允许您将C++字符串转换为整型。
为您的目的。您可能需要检测并去掉前导0x
(以及可能的前导/尾随空格等等),这就是为什么我建议限制性路线作为更好的选择。
你是指位或字节?该数组有32个固定位和16个变量。 – Dave