我有字符串表示数据。我需要将这些数据转换为十六进制数组。通过使用十六进制数组数据,我可以将其传递给CRC以写入外设
我的字符串数据是这样的
NSString *stringsdata=@"helloworld1234567812345q";
我需要转换为十六进制格式数组,如
{0x0h,0x0e............0x0q}.
因此,通过使用此数组,我可以将数据保存在crc中并将其写入外设数据
Byte comm[24];
comm[0]=0x01;
comm[1]=0x30;
comm[2]=0x62;
comm[3]=0x00;................
尝试了许多可能的解决方案,但没有运气。任何身体帮助将不胜感激。
答案 0 :(得分:2)
一个。十六进制格式只是相同数据的另一种表示形式。
B中。您不要将它们转换为十六进制数组。每个角色都有一个数字。例如,在ASCII和UTF-8中,A
的数字为65(十进制表示)。这是十六进制表示的0x41。
' A' (ASCII)== 65 == 0x41。
十六进制数字的数字为0
- 9
,a
- f
,其中a
的值为10,{{1} 11的值...通过将高位数乘以16并加上低位数,将转换器转换为十进制表示。 (0x41:4 x 16 + 1 = 65。)
请阅读并理解:http://en.wikipedia.org/wiki/Hexadecimal
℃。要将字符串转换为其数字,您必须知道要应用的代码。可能你想使用UTF-8。
b
答案 1 :(得分:1)
Byte[]
class是一个字符数组。我的意思是你只能在它的索引处设置一个字符。
如果我们有
Byte comm[24];
然后comm[0]=0x01;
看起来很混乱,因为它只会保存一个字符。
声明就像comm[0]='x';
。
下面的代码将从给定的字符串创建Byte[]
。
NSString *stringsdata=@"helloworld1234567812345q";
CFStringRef cfString = (__bridge CFStringRef)stringsdata;
char *array = charArrayFromCFStringRef(cfString);
size_t length= strlen(array);
Byte comm[24];
for (int i = 0; i < length; i++) {
comm[i] = array[i];
}
转换功能:
char * charArrayFromCFStringRef(CFStringRef stringRef) {
if (stringRef == NULL) {
return NULL;
}
CFIndex length = CFStringGetLength(stringRef);
CFIndex maxSize = CFStringGetMaximumSizeForEncoding(length, kCFStringEncodingUTF8);
char *buffer = (char *)malloc(maxSize);
if (CFStringGetCString(stringRef, buffer, maxSize, kCFStringEncodingUTF8)) {
return buffer;
}
return NULL;
}
<强>输出:强>
Printing description of comm:
(Byte [24]) comm = {
[0] = 'h'
[1] = 'e'
[2] = 'l'
[3] = 'l'
[4] = 'o'
[5] = 'w'
[6] = 'o'
[7] = 'r'
[8] = 'l'
[9] = 'd'
[10] = '1'
[11] = '2'
[12] = '3'
[13] = '4'
[14] = '5'
[15] = '6'
[16] = '7'
[17] = '8'
[18] = '1'
[19] = '2'
[20] = '3'
[21] = '4'
[22] = '5'
[23] = 'q'
}
这里的问题是,如果您仍然转换Byte[]
中的任何字符,那么您只能在任何索引处保存一个字符。
因为对于上面的字符,它的十六进制值不止一个字符,你只能在Byte[]
中保存一个字符。
我建议使用NSArray
以NSString
格式保存每个字符的十六进制值。