Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54

Число в шестнадцатиричном виде

24.04.2022, 18:52. Показов 4748. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста начинающему, как вывести в Edit2 число в шестнадцатиричном виде, то есть FFFF, вместо 65535.
В C# достаточно было указать после запятой 16, тут не нахожу вариантов. Если не затруднит кого ткните носом где об этом можно почитать, чтоб не лопатить кучу инфы.
C++
1
2
3
4
5
6
7
8
9
if(OpenDialog1->Execute())
    {
        TFileStream *file=new TFileStream(OpenDialog1->FileName,fmOpenRead);
        Edit1->Text = ChangeFileExt(ExtractFileName(OpenDialog1->FileName), "");
        Edit2->Text = IntToStr(file->Size);
 
        delete file;
 
    }
Добавлено через 23 минуты
В основном приходится заниматься с бинарными файлами, по этому почти всегда требуется работать с числами в шестнадцатиричном виде, хотелось бы изучить всё, что этого касается. Отображение в текстбоксе, считываение из текстбокса, конвертация.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2022, 18:52
Ответы с готовыми решениями:

Вывести число в его шестнадцатиричном виде
Есть переменная: int c = 50; Знаю, что можно реализовать при помощи сишной функции: printf("%x", c); Но как это сделать...

Вывести массив в шестнадцатиричном виде
Есть массив {0х1f,0xac,0x09}. Как вывести его в отдельный файл, чтоб каждом байте стояло 1f,ac,09? int main() { FILE *out; ...

Считывание float из файла в шестнадцатиричном виде
Здравствуйте. Возникла такая проблема: есть файл с числами float в шестнадцатиричном виде. К примеру 41 A5 54 6D (это что-то около...

33
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
24.04.2022, 20:07
Цитата Сообщение от vento702 Посмотреть сообщение
как вывести в Edit2 число в шестнадцатиричном виде, то есть FFFF, вместо 65535.
C++
1
Edit2->Text =  IntToHex(file->Size, 4);// IntToStr(file->Size);
1
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54
24.04.2022, 23:49  [ТС]
Спасибо, работает. Судя по тому, как изменяется отображение числа при изменении числа после запятой, это минимальное количество разрядов при выводе в строку. Не совсем понятно, зачем так задумано, думаю оставить единицу будет симпатичнее.
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
25.04.2022, 08:18
Цитата Сообщение от vento702 Посмотреть сообщение
Судя по тому, как изменяется отображение числа при изменении числа после запятой, это минимальное количество разрядов при выводе в строку. Не совсем понятно, зачем так задумано
Это задумано для дополнения нулями слева до нужной длины.
C++
1
Edit2->Text =  "0x" + IntToHex(file->Size, 8);
1
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54
25.04.2022, 11:33  [ТС]
Ещё раз спасибо. Извиняюсь перед модераторами, за то что тему разместил не в том разделе, не нашёл раздел C++ Builder для новичков, то есть для простых вопросов.
Я понимаю, что это нужно просто знать и пользоваться, но странная какая то логика получается. Как бы функция IntToStr конвертирует число в строку, StrToInt наоборот, из строки в число. А вот IntToHex как бы конвертирует число в число, но на выходе строка, не совсем понятен был этот момент. Как понимаю, для short и char таких конвертаций не задумано, жаль.
0
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,417
Записей в блоге: 3
25.04.2022, 11:49
Цитата Сообщение от vento702 Посмотреть сообщение
Как понимаю, для short и char таких конвертаций не задумано, жаль.
Не совсем понятно... А зачем?
0
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54
25.04.2022, 11:56  [ТС]
Я извиняюсь, наверно я непонятно сформулировал свой вопрос. Имел ввиду, такая комбинация не работает как мне нужно.
C++
1
2
short a = 0xAABB;
Edit1->Text = IntToHex(a,4);
0
 Аватар для FFPowerMan
2158 / 1238 / 509
Регистрация: 11.10.2018
Сообщений: 6,278
25.04.2022, 11:57
Может быть со знаками какая-нибудь закорюка? Вы знаете что такое short?
0
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,417
Записей в блоге: 3
25.04.2022, 12:06
Цитата Сообщение от vento702 Посмотреть сообщение
short a = 0xAABB;
Ну так еще бы это работало! Диапазон значений для типа short какой? От -32 768 до 32 767. А 0хААВВ это сколько? Правильно, 43707.
Причем хочу заметить, что ошибки, как таковой, не будет, будет просто не пойми какое значение...
Миниатюры
Число в шестнадцатиричном виде  
0
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54
25.04.2022, 12:15  [ТС]
Извините начинающего. unsigned short конечно.
Всё работает. Спасибо вам огромное.
0
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54
25.04.2022, 15:00  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Диапазон значений для типа short какой? От -32 768 до 32 767. А 0хААВВ это сколько? Правильно, 43707.
По поводу этого вопроса, если не ставить запятую с количеством регистров, то всё как бы ОК.
C++
1
2
short a = 0xFFFF;
Edit1->Text = IntToHex(a);
Миниатюры
Число в шестнадцатиричном виде  
0
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,417
Записей в блоге: 3
25.04.2022, 15:09
Цитата Сообщение от vento702 Посмотреть сообщение
то всё как бы ОК.
Вот именно - "как бы"... А потом выползают совершенно неочевидные ошибки... А что за нужда тип short тискать? Чем int не устраивает?
0
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54
25.04.2022, 15:23  [ТС]
Я просто привык так в C#, ну например если у меня чексумм 16, то я и объявляю переменную как Ushort. Если переполнение, регистры сами обрезаются, удобно же. Ну и много других примеров. Если юзать Uint, то потом приходится побитовый сдвиг задействовать. Лишние строки.
Разрешите ещё несложный вопрос по C++Builder , а как в одну строку проще написать обратное действие, чтоб считать из Edit число в шестнадцаричном виде?
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
25.04.2022, 17:05
Лучший ответ Сообщение было отмечено vento702 как решение

Решение

Цитата Сообщение от vento702 Посмотреть сообщение
ну например если у меня чексумм 16, то я и объявляю переменную как Ushort.
Вот и тут объявляй как беззнаковое. И не морочай дядям в голову.

Добавлено через 2 минуты
Цитата Сообщение от vento702 Посмотреть сообщение
чтоб считать из Edit число в шестнадцаричном виде
функция
C++
1
2
3
int x;
if (!TryStrToInt("0x" + Edit->Text, &x)) 
  ShowMessage("Ошибка преобразования");
1
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54
26.04.2022, 13:00  [ТС]
Благодарю всех за подсказки, операции с числами усвоил. Мой первый код на C++Builder. Простенькие манипуляции с бинарником.
Подскажите пожалуйста, как правильнее реализовать сохранение массива в файл.
В данном коде, если в строке 41 не добавляю расширение к имени файла ".bin", то существует возможность случайно переписать существующий файл, винда не предупреждает, что файл существует. Такой вариант не совсем меня устраивает. Нужно отказаться от Create и заменить на другое?
И если не затруднит, может я ещё какие то серьёзные ошибки допустил.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <vcl.h>
#include "Unit1.h"
#pragma resource "*.dfm"
#include <fstream>
TForm1 *Form1;
String ori = "";
int stop=0;
int size;
DynamicArray<unsigned char> arr;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   if(!OpenDialog1->Execute()) return;                     //Если файл не открыт, выход из функции
   ori = OpenDialog1->FileName;                            //Имя файла
   Edit1->Text = ChangeFileExt(ExtractFileName(ori), "");  //Имя файла без пути
   TFileStream *str=new TFileStream(ori,fmOpenRead);       //Открываю файл для чтения
   size = str->Size;                                         //Размер файла
   Edit2->Text = IntToHex(size,1);                           //Размер файла в формате HEX
   arr.Length=size;                                          //Задаю размер для динамического массива
   str->ReadBuffer(arr,size);                                //Запись в массив
   delete str;                                             //Удаляю стрим, закрываю файл
   unsigned short sum16=0;
   for(int q=0;q<size;q++)                                   //Чексумма 16 файла
   {
      sum16+=arr[q];
   }
   Edit3->Text = IntToHex(sum16);
   stop=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    if(stop==0){return;}
    if(!SaveDialog1->Execute())return;
    String temp = SaveDialog1->FileName + ".bin";
    TFileStream *str=new TFileStream(temp,fmCreate);        //Создаю новый файл и открываю
    if(stop==1)
    {
        stop++;
        for(int a=0;a<size-1;a+=2)                          //Делаю свап
        {
           unsigned char tempbyte;
           tempbyte = arr[a];
           arr[a]= arr[a+1];
           arr[a+1]=tempbyte;
        }
    }
    str->WriteBuffer(arr,size);
    delete str;
}
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
26.04.2022, 13:09
Цитата Сообщение от vento702 Посмотреть сообщение
существует возможность случайно переписать существующий файл, винда не предупреждает, что файл существует.
Штоб предупреждала, у SaveDialog включи опцию

1
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54
26.04.2022, 13:13  [ТС]
Работает! От души!
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
26.04.2022, 13:58
Цитата Сообщение от vento702 Посмотреть сообщение
Работает! От души!
с тебя пиво.
0
18 / 3 / 0
Регистрация: 20.12.2019
Сообщений: 54
26.04.2022, 14:35  [ТС]
Без проблем. Но ещё одну очень нужную мне мелочь нужно освоить, как правильно без лишних телодвижений сохранять в string и записывать обратно в дамп текстовую строку из бинарника. В шарпе такие манипуляции делаю через char, а тут что то пока не особо понял как по правильному.
Миниатюры
Число в шестнадцатиричном виде  
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
26.04.2022, 14:52
Цитата Сообщение от vento702 Посмотреть сообщение
В шарпе такие манипуляции делаю через char
У string есть метод const char* c_str(). Он тебя устроит?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2022, 14:52
Помогаю со студенческими работами здесь

Вывести старший и младший байт заданного целого положительного числа в шестнадцатиричном и двоичном виде
Дано целое положительное число , тип int. Вывести старший и младший байт в 16ом и в 2ом виде.

Как записать в строку число в шестнадцатиричном коде
Добрый день. Необходимо в строку записать число в шестрадцатирочном коде используя для этого 2 байта и направить строку в socket. ...

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

Просмотр файла в текстовом и шестнадцатиричном виде
нужно написать программу позволяющую просмотреть содержимое файла в текстовом и шестнадцатиричном виде!имя просматриваемого файла...

Преобразовать QR изображение в символьном шестнадцатиричном виде
Здраствуйте. Есть проблема, нужно преобразовать QR изображение в символьном шестнадцатиричном виде. Преобразовал изображение в строку бит,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru