Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с байтами

52K
24 августа 2010 года
S1avik
27 / / 15.08.2010
задача такая: есть 2 байта, необходимо вычислить их значение вместе. Допустим первый байт 10110111, второй 11101011. С одним байтом справляюсь легко, просто перевожу его из типа char(в таком типе они хранятся в буфере) в int. А нужно посчитать значение 2 байт вместе, т.е. 1*2^0+0*2^1+1*2^2+... +1*2^14+1*2^15. Подскажите как это можно сделать???
2.1K
24 августа 2010 года
Norgat
452 / / 12.08.2009
ну как то так можно:

Код:
#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

// возвращает первый бит байта
inline int get_first_bit(char byte) { return byte%2; }

void print_bit(char bit)
{
    for(int i = 7;i >= 0; --i)
        cout << get_first_bit(bit >> i);
}

// возводит Int в степень n
int degree(int Int, int n)
{
    int res = 1;
    for(int i = 1; i < n; ++i)
        res *= Int;
    return res;
}

void main()
{
    string buffer = "";
    cout << "Write string: ";
    cin >> buffer;
    cout << endl;

    int current_bit = 0;
    long int Result = 0;
    for(int i = 0; i < buffer.length(); ++i)
    {
        char buf = buffer;
        print_bit(buf);
        for(int j = 0; j < 8; ++j)
        {
            Result += get_first_bit(buf >> j) * degree(2, current_bit);
            ++current_bit;
        }
    }

    cout << endl;
    cout << "Result: " << Result << endl;

    _getch();
}


get_first_bit и degree вынес отдельно для наглядности.

п.с. кол-во бит для обработки не ограничено, но переполнения Result никто не отменял, так что учти это...
282
25 августа 2010 года
Bard
481 / / 26.02.2006
Цитата: S1avik
...из типа char...



2Norgat
Имели ввиду по всей видимости два байта которые расположены в ячейках типа char.


В таком случае:

 
Код:
char byte1 = 0x11;
char byte2 = 0x22;
short r = byte1 | (byte2 << 8);


в результате r == 0x2211

Цитата: S1avik
...в таком типе они хранятся в буфере...



А шо мешает

 
Код:
char *buf;
...
short r = *(short*)&buf[...];


или

 
Код:
char *buf;
...
short *buf2 = (short*)buf;
...


?
52K
08 сентября 2010 года
S1avik
27 / / 15.08.2010
спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог