2012-04-20 166 views
0

我有一个CString对象STR =“5043”,现在我想转换为十六进制,并把它放在UCHAR阵列像如何将CString转换为UCHAR数组?

UCHAR sample[2]; 
Sample[0] = 0X50 
Sample[1] = 0X43 

我怎样才能做到这一点?请指教我

+0

这可能已经在这个线程回答:http://stackoverflow.com/questions/3381614/c-convert-string-to-hexadecimal-and-vice-versa – 2012-04-20 08:13:55

+0

作为一个可能性扩大这个问题的范围是“cstring object str” - >“string”。 “UCHAR” - >“unsigned char”,然后把这留作C++问题。 – 2012-04-20 08:46:53

回答

1

您可以使用sscanf()字符串,有事直接扫描的十六进制值象下面这样:

UCHAR sample[2]; 
for (int i = 0; i < str.length()/2 ; i++) { 
    sscanf((str.substr(i*2,2)).c_str(), "%hx", &sample[i]); 
} 

h是短期和x是十六进制明显。

另外,这里假定UCHAR数组被声明为大小的一半大小。

+0

谢谢,它工作得很好:) – Naruto 2012-04-20 09:04:14

+0

不客气! – vvnraman 2012-04-20 09:19:37

1

你试过strol?这似乎有点低科技,但应该做的伎俩。不要忘记通过16作为基地...

你需要结合它与一点点移动和按位分割结果到你需要,但这应该是直截了当的。

希望这有助于

+0

其实,我已经得到了转换价值,但我只需要更新到UCHAR变量 – Naruto 2012-04-20 08:30:29

+0

嗯,在这种情况下,我认为你需要一个不同的问题!即如何将整数分成两个字节? (对于十六位值)您可能需要将高位字节和位数右移8位,对于低位字节,将(&)与255位右移位。 – 2012-04-20 08:36:53

0

为了简化代码,您可以使用联合(例如,

union 
    { 
    UCHAR char_val[2]; 
    long long_val; 
    }; 

    CString str = "5043"; 
    long_val = strtol(str.GetString(), nullptr, 16); 
    // use char_val here