Использование расширенных шестнадцатеричных кодов в Xcode - PullRequest
0 голосов
/ 13 марта 2012

Я очень новичок в этом и пытаюсь использовать расширенные шестнадцатеричные коды (за исключением символов ascii из 127), которые генерируются путем преобразования десятичного числа в число с плавающей точкой, которое затем отправляется с помощью команды post на устройство для изменить заданное значение.

Я создаю шестнадцатеричные коды, просто делая это,

- (void)dec2float:(id)sender
{
    NSString *dec = setPoint.text;
    float flt = [dec floatValue];
    unsigned char *bytes = (unsigned char *)&flt;
    sPoint01 = [NSString stringWithFormat:@"%x", bytes[0]];
    sPoint02 = [NSString stringWithFormat:@"%x", bytes[1]];
    sPoint03 = [NSString stringWithFormat:@"%x", bytes[2]];
    sPoint04 = [NSString stringWithFormat:@"%x", bytes[3]];
}

Если значение setPoint.text, например, 23, это составит

sPoint01 = 00
sPoint02 = 00
sPoint03 = b8
sPoint01 = 41

Эти значения затем должны быть отправлены на устройство в виде шестнадцатеричной строки, которая соединяется вместе, так что

NSString *post = [NSString stringWithFormat:@"\\x%@\\x%@\\x%@\\x%@",sPoint01, sPoint02, sPoint03, sPoint04];

но вместо "0000b841" я получаю "00005c78 62385c78 3431". Я предполагаю, что это потому, что XCode не будет позволять какой-либо шестнадцатеричный код после 127, как будто я пытаюсь ввести его так

@"\xb8"

Xcode сообщает мне, что «Преобразование ввода остановлено из-за входного байта, который не принадлежит входному набору кодов UTF-8».

Правильно ли я иду по этому пути или мне удалось пройти долгий путь по неправильному пути?

Любая помощь будет высоко ценится, и любые советы приветствуются.

Заранее спасибо

Edit:

Привет, Спасибо за ответ. Это команда, которую я использую для отправки данных на контроллер. Надеюсь, это поможет,

- (void)setACStatus:(id)sender
{    
NSString *post = [NSString stringWithFormat:@"\x38\x00\x00\x00\x76\x11\x01\x00%@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00%@\x00%@%@\x00\x10\x00\x10%@%@%@%@%@\x00\x00\x00",
                      unitNumberString, onOffString, modeString, modeString2, sPoint01, sPoint02, sPoint03, sPoint04, 
                      fanSpeedString];

     postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];    

    NSString *postLength = [NSString stringWithFormat:@”%d”, [postData count];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

    [request setURL:[NSURL URLWithString:@”http://10.38.140.9/cmd/”]];//<-- Controller address.
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/octet-stream" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if( theConnection )
    {
        webData = [NSMutableData data];
    }
    else
    {
        NSLog (@"The Connection is NULL");
    }

    temp.text = [NSString stringWithFormat:@"%@",postData];
}

Thankyou.

1 Ответ

0 голосов
/ 23 марта 2012

Похоже, вы пытаетесь создать объект NSData из строки, но вы уже знаете байты, которые вы хотите, чтобы объект данных содержал.Вместо того, чтобы выполнять дополнительный шаг создания строки и пытаться преобразовать ее в объект данных, просто создайте объект данных из ваших байтов, например:

typedef struct postDataType = {
    unsigned char someData0[8];
    int unitNumberString;
    unsigned char someData1[33]; // or however many bytes it is
    unsigned char onOffString;
    // etc... rest of fields go here
} postDataType;
postDataType dataBytes = {
    {0x38, 0x00, 0x00 0x00, 0x76, 0x11, 0x01, 0x00},
    [unitNumberString intValue],
    // etc... fill in the rest of the fields here with the data you want
};
postData = [NSData dataWithBytes:dataBytes length:sizeof(dataBytes)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...