IOS:将字符串转换为十六进制数组

时间:2014-12-30 06:08:48

标签: ios objective-c nsstring hex core-bluetooth

我有字符串表示数据。我需要将这些数据转换为十六进制数组。通过使用十六进制数组数据,我可以将其传递给CRC以写入外设

我的字符串数据是这样的

          NSString *stringsdata=@"helloworld1234567812345q";

我需要转换为十六进制格式数组,如

       {0x0h,0x0e............0x0q}. 

因此,通过使用此数组,我可以将数据保存在crc中并将其写入外设数据

            Byte comm[24];
            comm[0]=0x01;
            comm[1]=0x30;
            comm[2]=0x62;
            comm[3]=0x00;................

尝试了许多可能的解决方案,但没有运气。任何身体帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

一个。十六进制格式只是相同数据的另一种表示形式。

B中。您不要将它们转换为十六进制数组。每个角色都有一个数字。例如,在ASCII和UTF-8中,A的数字为65(十进制表示)。这是十六进制表示的0x41。

' A' (ASCII)== 65 == 0x41。

十六进制数字的数字为0 - 9a - 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[]中保存一个字符。

我建议使用NSArrayNSString格式保存每个字符的十六进制值。