Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 10.06.2013
Сообщений: 153

snprintf x64

18.07.2021, 16:02. Показов 1596. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, почему 8 байтное число не записывается в массив char?

C++
1
2
3
INT64 value = 0x100FF00000000000;
TCHAR string[255];
snprintf(string, 255, "%i", value);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2021, 16:02
Ответы с готовыми решениями:

Не работает snprintf с va_list C++98
Хочу собрать функцию вывода на подобии printf, но немогу понять почему snprintf делает пустоту, хотя результат его > 0 const...

Где взять и как подцепить к Code Blocks бесплатный компилятор x64 стандарта C++11 для Windows 7 x64?
Где взять и как подцепить к Code Blocks бесплатный компилятор x64 стандарта C++11 для Windows 7 x64?

User32.dll на Win x64 - это x86-библиотека, x64 или. и то и другое одновременно?
В проектах .NET функции из нее нормально импортируются при любой разрядности проекта - как x86, так и x64. Как написать такую библиотеку?

19
124 / 44 / 15
Регистрация: 01.11.2020
Сообщений: 122
18.07.2021, 16:29
напишите в чем проблема
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.07.2021, 17:00
Rybik001, потому что формат для 64 разрядов другой. %i не подходит.
0
Заблокирован
18.07.2021, 17:19
%ll ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
18.07.2021, 17:25
Цитата Сообщение от Rybik001 Посмотреть сообщение
Подскажите, почему 8 байтное число не записывается в массив char?
Что такое INT64 и почему вы решили, что для него вообще есть формат в printf? Если это знаковый целый тип ширины 64, то, например

C++
1
snprintf(string, 255, "%" PRIi64, (std::int64_t) value);
Также не ясно, почему буфер объявлен как TCHAR.
0
Заблокирован
18.07.2021, 17:29
%llu/%llX
0
1 / 1 / 0
Регистрация: 10.06.2013
Сообщений: 153
18.07.2021, 19:09  [ТС]
C++
1
snprintf(string, 255, "%I64i", value);
Нашел решение
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
19.07.2021, 16:50
Цитата Сообщение от Rybik001 Посмотреть сообщение
Нашел решение
...которое не работает.
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <inttypes.h>
 
int main(){
  int64_t value=5000000000;
  char string[1000];
  snprintf(string, 255, "%I64i", value);
  printf("Rybik001: %s\n", string);
  snprintf(string, 255, "%" PRIi64, value);
  printf("TheCalligrapher: %s\n", string);
}
Code
1
2
3
4
$ gcc main.c
$ ./a.out 
Rybik001:                                                        705032704
TheCalligrapher: 5000000000
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
19.07.2021, 18:21
А чем плох
C++
1
  snprintf(string, 255, "%Li", value);
0
фрилансер
 Аватар для Алексей1153
6442 / 5636 / 1127
Регистрация: 11.10.2019
Сообщений: 14,982
19.07.2021, 18:29
а чем плох
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
  int64_t value=5000000000;
  std::cout<<std::to_string(value);
}
?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
19.07.2021, 19:11
Цитата Сообщение от TRam_ Посмотреть сообщение
А чем плох
C++
1
  snprintf(string, 255, "%Li", value);
Ну хотя бы тем, что

1. Нет никакого "%Li". L применимо только к плавающим форматам.
2. Ни один из стандартных форматов printf не является применимым к "неизвестному" типу INT64. Пока никаких гарантий по поводу это типа нам не дано, любое решение будет требовать явного приведения к стандартному типу.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
19.07.2021, 21:22
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"неизвестному" типу INT64
чем тебе INT64 неизвестен?
стандартное определение в стандартном хидере
C++
1
2
//basestd.h
typedef signed __int64 INT64, *PINT64;
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
19.07.2021, 21:27
Цитата Сообщение от _lunar_ Посмотреть сообщение
стандартное определение в стандартном хидере
Во-первых, что это за "стандартный хидер" такой? Как называется?

Во-вторых, определен как синоним для signed __int64? __int64? А это что за загадочный тип? Тоже "стандартный"?
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
19.07.2021, 21:35
TheCalligrapher, ну ты прям как в детском саду

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Как называется?
Windows.h

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А это что за загадочный тип?
C++
1
typedef signed long long INT64, *PINT64;
так проще?
https://docs.microsoft.com/ru-... w=msvc-160

по сабжу
C++
1
2
3
4
5
6
7
8
9
10
11
#include <Windows.h>
#include <stdio.h>
 
int main()
{
    INT64 value = 0x100FF00000000000;
    TCHAR string[255]{};
    snprintf(string, 255, "0x%llX", value);
 
    return 0;
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
20.07.2021, 00:13
Цитата Сообщение от _lunar_ Посмотреть сообщение
Windows.h
Ну то есть ничего "стандартного" в нем нет.

Цитата Сообщение от _lunar_ Посмотреть сообщение
C++
1
typedef signed long long INT64, *PINT64;
так проще?
Не понял. А это откуда? Так все таки определились: signed __int64 или signed long long? А то, что то я смотрю, семь пятниц на неделе.

Но это на самом деле не важно, ибо в это проблема и заключается. Стандартный тип, скрывающийся за INT64, не оговорен? Не оговорен. Значит либо

1. Тот самый windows.h предоставляет вместе с типом INT64 специальный формат для его использования в printf. Например, макрос, по аналогии с <inttypes.h>. Или, как тут уже приводили, объявляет нестандартный формат, вроде I64, если это именно для него.

либо

2. Ни о каком использовании INT64 в printf не может быть и речи.

Цитата Сообщение от _lunar_ Посмотреть сообщение
C++
1
2
3
    INT64 value = 0x100FF00000000000;
    TCHAR string[255]{};
    snprintf(string, 255, "0x%llX", value);
Нет. Еще раз, правильно:

C++
1
snprintf(string, 255, "%" PRIi64, (std::int64_t) value);
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
20.07.2021, 01:15
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну то есть ничего "стандартного" в нем нет.
ну конечно, Windows.h это совсем нестандартный хидер в винде и визуалке..
и применяется исключительно в нетривиальных задачах..

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А это откуда?
ссылку то открывал?
там же написано
The __int64 type is synonymous with type long long.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Стандартный тип, скрывающийся за INT64, не оговорен? Не оговорен.
я тебя вообще не понимаю
ты с другой планеты что ли?
что значит не оговорен?
любой здравомыслящий человек, открывая студию в винде, сразу подключает хидер Windows.h (один хидер на всё!)
после подключения я пишу INT64 и не знаю никаких проблем, о которых ты говоришь.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет. Еще раз, правильно:
какая разница как написать? если результат при этом один и тот же?
нет никакого правильно или неправильно, ЯП "эластичен" и позволяет делать вариации.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
20.07.2021, 02:41
Цитата Сообщение от _lunar_ Посмотреть сообщение
любой здравомыслящий человек, открывая студию в винде, сразу подключает хидер Windows.h (один хидер на всё!)
Чего? Нет, конечно, люди, "сразу подключающие хидер Windows.h", очевидно занимаются системно-специфичным программированием для Windows и обитают в соответствующем форуме. Но даже они не будут подключать Windows.h без явной на то необходимости.

Это же форум посвящен программированию на С++. Никто и никогда здесь ни в коме случае не подключает никакой Windows.h, даже открывая студию в винде. С чего бы это вдруг? За манеру "сразу подключать" подобный деятель сразу получит на лобешник штамп "овнокодера", линейкой по рукам и запрет подходить к коду на год.

Я "открываю студию в винде" уже не помню как давно. Однако мне никогда не приходилось подключать Windows.h, за редкими исключениями.

Цитата Сообщение от _lunar_ Посмотреть сообщение
после подключения я пишу INT64 и не знаю никаких проблем, о которых ты говоришь.
Получаешь, получаешь! Эта проблема называется "овнокод". Правда не все умеют его распознавать.

Для того, незнающий проблем вы наш, и существует хидер Windows.h, для того в нем и объявлен псевдоним INT64, чтобы вы НЕ знали, какой стандартный (и стандартный ли) тип за ним скрывается. И не лазили туда смотреть. В этом и заключается все назначение псевдонимов типов.

Любая синонимичность с long long, даже если она есть, является лишь мимолетным свойством конкретной реализации. Никакой синонимичности здесь, разумеется, быть не может, ибо INT64 явно должен обозначает тип фиксированной ширины (судя по названию), а long long типом фиксированной ширины не является в принципе.

Цитата Сообщение от _lunar_ Посмотреть сообщение
какая разница как написать? если результат при этом один и тот же?
См. выше.
0
1 / 1 / 0
Регистрация: 10.06.2013
Сообщений: 153
20.07.2021, 10:47  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
ибо INT64 явно должен обозначает тип фиксированной ширины
Какой тип данных ты используешь для объявления 64 битной переменной?
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
20.07.2021, 11:07
Rybik001, стандартный (u)int64_t. Он описан в стандартном хедере stdint.h. Там же описаны макро-форматы для printf. И, в отличие от ваших костылей, этот тип работает. Причем на всех более-менее современных системах.
P.S. Теоретически, более правильно использовать (u)int_least64_t или (u)int_fast64_t, чтобы компилятор сам подобрал наиболее подходящий тип. Но на практике систему, не поддерживающую строго 64-битные целые представить сложно.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
20.07.2021, 19:53
Цитата Сообщение от Rybik001 Посмотреть сообщение
Какой тип данных ты используешь для объявления 64 битной переменной?
Так писали ж уже не раз выше:

Нужна именно знаковая целочисленная 64-битная переменная - используем тип std::int64_t.
Нужна именно переменная для интерфейса с некоей функцией WinAPI, требующей INT64 - используем тип INT64.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.07.2021, 19:53
Помогаю со студенческими работами здесь

Linux Mint 20 x64, Firefox 79 x64. Отключить замыливание текста
Поставил Linux Mint 20, отключил сглаживание шрифтов, поставил шрифты от Windows XP, все хорошо, все нравится. Только в Firefox остался...

Ищу обновления KB938397-x64 и KB968730-x64 для Windows Server 2003x64
Господа плиз ХЕЛП! Ищем обновы KB938397x64 и KB968730x64 для Windows Server 2003x64 RUS, а то сволочной сервер 1С не видит интеренет. ...

HP Pavilion g7 - 2160er переустановил Windows HP x64 на Ultimate x64 - проблема с подсветкой монитора
HP Pavilion g7 - 2160er переустановил windows home premium x64 на Ultimate x64/ Стала выеживаться подсветка монитора - хочет работает,...

Нестандартная ситуация, установка еще одной w7 x64 на уже установленный комп с w7 x64
Всем доброго времени суток ! Не совсем стандартная ситуация, которая посадила меня на гвоздь в позе &quot;шпагат&quot; ))) Есть машинка...

Я переустановил винду и вместо x64 поставил x86! А теперь не могу поставить x64 обратно(((
Я переустановил винду и вместо x64 поставил x86! А теперь не могу поставить x64 обратно((( Пишет что &quot;Версия этого файла несовместима...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru