C ++: самый быстрый способ доступа к определенному октету int - PullRequest
0 голосов
/ 14 марта 2012

Предполагается, что у нас 32-разрядное целое число, 8-разрядное char, компилятор gcc и архитектура Intel:

Каким был бы самый быстрый способ (без использования ассемблера), например, извлечь третий октет целочисленной переменной? Например, чтобы сохранить его в символе определенного места в символе []?

Ответы [ 4 ]

6 голосов
/ 14 марта 2012

Для 3-го октета (младший порядок):

int i = 0xdeadbeef;
char c = (char) (i>>16); // c = 0xad
3 голосов
/ 14 марта 2012

используйте Союз :

union myCharredInt
{
    int myInt;
    struct {
        char char1;
        char char2;
        char char3;
        char char4;
    }
};

myCharredInt a = 5;

char c = a.char3;
0 голосов
/ 14 марта 2012

Всякий раз, когда вы ищете «самый быстрый» или «лучший» способ сделать что-то в очень специфических обстоятельствах, ответ почти всегда будет: экспериментируйте и узнайте.поэтому они не дадут вам окончательного ответа для вашей конкретной системы, архитектуры, компилятора и т. д.

Как вы узнаете, что лучше?

Ответ: Попробуйте их.Профилируйте их.

Nb: Я немного шутливый.Я подозреваю, что вы действительно хотите знать, как это сделать вообще, а не как делать это быстрее всего.

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

сместить октет к младшему значащему октету и сохранить его

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

char *ptr;
....
*ptr = val >> 8;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...