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变量上?

在此先感谢 (感谢戴夫,输入错误字节为位,现在固定)

+0

你是指位或字节?该数组有32个固定位和16个变量。 – Dave

其实,我也不会做,与自由格式的文本输入的话 - 这将是太多的打扰做验证(本质上是懒惰)。如果有机会尽可能早的限制你的用户能够给你的东西,你应该采取:-)

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

+0

你的图形技能足够好=)谢谢你的回答,但即使我这样做了,我怎么能得到这些值翻译成一个字符(实际上是两个)?我不关心用户输入,因为这只是我的工程师测试他的芯片,因此他会知道该写什么。 – Mateus

+0

@Mateus,我在这里添加了一小段内容,将单个CListBox项目转换为可用的字节值。 – paxdiablo