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

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

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

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

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

Всем доброго времени суток... есть long int число, состоящее из 4 байт, нужно их записать в массив char по 2 байта в ячейку, но эти значения должны быть 16-тиричные.
Вот так брал по 2 байта
C++
1
2
frame[51] = abs(smpCnt >> 4);
frame[52] = abs(smpCnt - frame[51]);
но вот как записать в 16 ричном виде, ума не приложу помогите пожалуйста ))
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 11:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Long int записать в hex побайтно (C++):

Быстрое вычисление наибольшего общего делителя для unsigned long long int - C++
Даны два числа типа unsigned long long int, в них могут оказаться любые представимые значения, требуется максимально быстро вычислить...

Подскажите что за типа такой long long int? - C++
Вопрос собственно сверху. Нигде не смог найти описания подобного типа

Максимальная и минимальная цифра числа long long int - C++
Доброго времени суток! Подскажите, пожалуйста, как с помощью цикла (while, do while, for) определить максимальную и минимальную цифры числа...

Работа с unsigned long long int на 32-битных системах - C++
В программе испольуется тип данных unsigned long int, но в некоторых (хотя и очень редких) случаях этого диапазона может быть недостаточно....

Std::count << std::hex << (long) 0x0a; Как сделать, чтоб от HEX значения ноль при выводе не убирался? - C++
сабж...( std::count &lt;&lt; std::hex &lt;&lt; (long) 0x0a; ) выводится просто a, вместо 0а, а надо чтоб было именно 0а... куда делся setw,...

long long int и его поведение в структуре - C++
#include &lt;iostream&gt; struct IndexBase { public: int x; int y; int z; unsigned int lastChange; unsigned long long int...

8
nmcf
5356 / 4676 / 1566
Регистрация: 14.04.2014
Сообщений: 18,651
29.04.2014, 11:49 #2
Как это по 2 байта в ячейку, если char - 1 байт?
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
29.04.2014, 12:24 #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;
}
1
IrineK
Заблокирован
29.04.2014, 12:29 #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 байту.
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
29.04.2014, 12:29 #5
Цитата Сообщение от Fobes Посмотреть сообщение
но вот как записать в 16 ричном виде, ума не приложу помогите пожалуйста ))
C++
1
std::cin >> hex >> lint;
Число lint вводится в 16-ом представлении. А дальше делайте с байтами, что хотите.
Если конечно я вас правильно понял и вопрос стоял в вводе в 16-ом формате
1
IrineK
Заблокирован
29.04.2014, 13:41 #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;
}
1
Миниатюры
Long int записать в hex побайтно  
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
29.04.2014, 14:13 #7
HIWORD macro
LOWORD macro
HIBYTE macro
LOBYTE macro
1
Fobes
16 / 16 / 2
Регистрация: 19.09.2012
Сообщений: 212
29.04.2014, 21:08  [ТС] #8
Всем спасибо за помощь, сделал так:
C++
1
2
frame[51] = (smpCnt>>8) & 0xff;  
frame[52] = smpCnt & 0xff;
Добавлено через 2 часа 37 минут
Появилась новая проблема, не учитывается знак числа в моем способе Как его подправить можно?
0
IrineK
Заблокирован
30.04.2014, 02:35 #9
Fobes,
прочитайте это Дополнительный код

и скажите, а что вы хотите получить?
1
30.04.2014, 02:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 02:35
Привет! Вот еще темы с ответами:

Как процессор работает с long long int ? - C++
На моей системе (WinXP SP3 32bit) sizeof(long long int); возвращает 8. 8 Байт. Это 64 бита. Как процессор работает с такой переменной, если...

Как побайтно записать целое в файл - C++
Как побайтно записать целое в файл с помощью fputc(). А потом считать эти 4 байта fgetc() и опять превратить в то же целое, которое писали.

Long int и int : не понимаю! - C++
Вот простой код на С++. Который находит количество цифр в числе . Я создаю переменную типа long int number1; . После запуска программы для...

указатели (int, long). - C++
подскажите как выбрать данные из памяти с помощью разных типов указателей (int, long).


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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