Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fobes
16 / 16 / 2
Регистрация: 19.09.2012
Сообщений: 212
#1

Long int записать в hex побайтно - C++

29.04.2014, 11:46. Просмотров 1164. Ответов 8
Метки нет (Все метки)

Всем доброго времени суток... есть long int число, состоящее из 4 байт, нужно их записать в массив char по 2 байта в ячейку, но эти значения должны быть 16-тиричные.
Вот так брал по 2 байта
C++
1
2
frame[51] = abs(smpCnt >> 4);
frame[52] = abs(smpCnt - frame[51]);
но вот как записать в 16 ричном виде, ума не приложу помогите пожалуйста ))
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 11:46     Long int записать в hex побайтно
Посмотрите здесь:
C++ Быстрое вычисление наибольшего общего делителя для unsigned long long int
C++ Подскажите что за типа такой long long int?
Максимальная и минимальная цифра числа long long int C++
Работа с unsigned long long int на 32-битных системах C++
Std::count << std::hex << (long) 0x0a; Как сделать, чтоб от HEX значения ноль при выводе не убирался? C++
C++ long long int и его поведение в структуре
C++ Как процессор работает с long long int ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5276 / 4596 / 1541
Регистрация: 14.04.2014
Сообщений: 18,265
29.04.2014, 11:49     Long int записать в hex побайтно #2
Как это по 2 байта в ячейку, если char - 1 байт?
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
29.04.2014, 12:24     Long int записать в hex побайтно #3
C
1
sprintf(frame, "%X", smpCnt);
Добавлено через 9 минут
C++
1
2
3
4
5
6
for(i=0; i<8; i++){
  long int digit=(smpCnt>>((8-i)*4))&0x0F;
  frame[i]='?';
  if (digit>=0 && digit<=9) frame[i]='0'+digit;
  if (digit>=10 && digit<=15) frame[i]='A'+digit;
}
IrineK
Заблокирован
29.04.2014, 12:29     Long int записать в hex побайтно #4
Цитата Сообщение от Fobes Посмотреть сообщение
из 4 байт
Цитата Сообщение от Fobes Посмотреть сообщение
по 2 байта
Цитата Сообщение от Fobes Посмотреть сообщение
массив char
О размерах легко узнать:
C++
1
2
3
std::cout << "size of unsigned long int = "<< sizeof(unsigned long int) << '\n';
std::cout << "size of unsigned short int = "<< sizeof(unsigned short int) << '\n';
std::cout << "size of unsigned char = "<< sizeof(unsigned char) << '\n';
Определитесь, что вам нужно: две части по 2 байта или 4 по 1 байту.
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
29.04.2014, 12:29     Long int записать в hex побайтно #5
Цитата Сообщение от Fobes Посмотреть сообщение
но вот как записать в 16 ричном виде, ума не приложу помогите пожалуйста ))
C++
1
std::cin >> hex >> lint;
Число lint вводится в 16-ом представлении. А дальше делайте с байтами, что хотите.
Если конечно я вас правильно понял и вопрос стоял в вводе в 16-ом формате
IrineK
Заблокирован
29.04.2014, 13:41     Long int записать в hex побайтно #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
typedef unsigned long int byte4;
typedef unsigned short int byte2;
typedef unsigned char byte1;
 
typedef union _TwoB
{   byte4 num;
    byte2 arr[2];
} TwoByteArray;
 
typedef union _OneB
{   byte4 num;
    byte1 arr[4];
} OneByteArray;
 
int main()
{   setlocale (LC_CTYPE, "Russian");
    byte4 num = 1234567890;
    std :: cout << "Исходное 4-байтное число в 16-ричном представлении: " 
                << std::hex << num << "\n\n";
 
    TwoByteArray *TB = (TwoByteArray*) &num;
    for (int i = 0; i<2 ; i++)
        std :: cout << i+1 <<"-я пара байт в 16-ричном представлении: " 
                    << std::hex << TB->arr[i] << "\n";
    std :: cout << "\n";
    
    OneByteArray *OB = (OneByteArray*) &num;
    for (int i = 0; i<4 ; i++)
        std :: cout << i+1 <<"-й байт в 16-ричном представлении: " 
                    << std::hex << (byte2) OB->arr[i] << "\n";
 
    std::cin.get();
    return 0;
}
Миниатюры
Long int записать в hex побайтно  
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
29.04.2014, 14:13     Long int записать в hex побайтно #7
HIWORD macro
LOWORD macro
HIBYTE macro
LOBYTE macro
Fobes
16 / 16 / 2
Регистрация: 19.09.2012
Сообщений: 212
29.04.2014, 21:08  [ТС]     Long int записать в hex побайтно #8
Всем спасибо за помощь, сделал так:
C++
1
2
frame[51] = (smpCnt>>8) & 0xff;  
frame[52] = smpCnt & 0xff;
Добавлено через 2 часа 37 минут
Появилась новая проблема, не учитывается знак числа в моем способе Как его подправить можно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 02:35     Long int записать в hex побайтно
Еще ссылки по теме:
Long int и int : не понимаю! C++
Как побайтно записать целое в файл C++
указатели (int, long). C++
C++ Shot int b long double
C++ LONG VS DOUBLE / INT VS FLOAT

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IrineK
Заблокирован
30.04.2014, 02:35     Long int записать в hex побайтно #9
Fobes,
прочитайте это Дополнительный код

и скажите, а что вы хотите получить?
Yandex
Объявления
30.04.2014, 02:35     Long int записать в hex побайтно
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru