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

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

Восстановить пароль Регистрация
 
Fobes
16 / 16 / 2
Регистрация: 19.09.2012
Сообщений: 207
29.04.2014, 11:46     Long int записать в hex побайтно #1
Всем доброго времени суток... есть 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++
C++ long long int и его поведение в структуре
указатели (int, long). C++
C++ Подскажите что за типа такой long long int?
C++ Как процессор работает с long long int ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4324 / 3745 / 1260
Регистрация: 14.04.2014
Сообщений: 14,688
29.04.2014, 11:49     Long int записать в hex побайтно #2
Как это по 2 байта в ячейку, если char - 1 байт?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 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
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 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
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 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
Сообщений: 207
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 побайтно
Еще ссылки по теме:

Std::count << std::hex << (long) 0x0a; Как сделать, чтоб от HEX значения ноль при выводе не убирался? C++
52 бит не влазит в long int C++
C++ Быстрое вычисление наибольшего общего делителя для unsigned long long int

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

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

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

Текущее время: 06:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru