Другое С/С++ Вопрос - Ответ

Fomikus

Известный
Проверенный
475
345
Как перевести цвет игрока в хекс?
Lua:
--Lua
color = ("%06X"):format(bit.band(sampGetPlayerColor(id), 0xFFFFFF))
 

checkdasound

Известный
Проверенный
963
410
Как перевести цвет игрока в хекс?
Lua:
--Lua
color = ("%06X"):format(bit.band(sampGetPlayerColor(id), 0xFFFFFF))
если тебе нужно цвет игрока цифрами перевести в 0x..., то это dec to hex.
C++:
std::string DecimalToHeximal(int dec)
{
    char hex[20];
    _itoa(dec, hex, 16);
    return hex;
}
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,808
если тебе нужно цвет игрока цифрами перевести в 0x..., то это dec to hex.
C++:
std::string DecimalToHeximal(int dec)
{
    char hex[20];
    _itoa(dec, hex, 16);
    return hex;
}
Застрелись.
C++:
std::string IntToHexString(unsigned int digit) {
    std::stringstream Hex;
    Hex << std::setw(8) << std::hex << digit;
    return Hex.str();
}

Либо на C++20:
C++:
inline std::string IntToHexString(unsigned int digit) {
    return std::format("{:08X}", digit);
}
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,808
Так то его метод быстрее стрима.

А самый быстрый вариант с to_chars/from_chsrs https://en.cppreference.com/w/cpp/utility/to_chars
Быстрее, но _itoa это платформозависимая функция, так еще из Си, а также она не может добавить незначащих нулей в начало
to_chars не умеет в добавление нулей в начало и конвертация в hex, а также не особо неудобен в использовании
UPD: to_chars имеет fmt, в котором можно обозначить hex, но все также не умеет в добавление незначащих нулей
 

Vintik

Через тернии к звёздам
Проверенный
1,526
1,011
Быстрее, но _itoa это платформозависимая функция, так еще из Си, а также она не может добавить незначащих нулей в начало
to_chars не умеет в добавление нулей в начало и конвертация в hex, а также не особо неудобен в использовании
UPD: to_chars имеет fmt, в котором можно обозначить hex, но все также не умеет в добавление незначащих нулей
А зачем тебе нули в начале? Последний раз я их использовал в 5 классе, чтобы поприкалываться над учительницей математики.
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,808
А зачем тебе нули в начале?
За мясом

Последний раз я их использовал в 5 классе, чтобы поприкалываться над учительницей математики.
Как минимум чтобы числа когда ты печатаешь их в лог, были друг под другом, а не в разнобой, самому же удобнее читать, ну
 
  • Ха-ха
  • Нравится
Реакции: sc6ut и Vintik

SR_team

like pancake
BH Team
4,802
6,473
_itoa это платформозависимая функция
есть itoa, которая не платформозависимая
не умеет в добавление нулей в начало
а они нужны?
и конвертация в hex
умеет

UPD: Да, заметил, нули ему нужны. Энивей, sprintf возможно будет быстрее стримов, т.к. там нахер не нужные локали
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,808
есть itoa, которая не платформозависимая

а они нужны?

умеет

UPD: Да, заметил, нули ему нужны. Энивей, sprintf возможно будет быстрее стримов, т.к. там нахер не нужные локали
Так printf тянет локали ведь

P.S. В своем решение я хотел показать «более плюсовый» метод
 

Dark_Knight

Me, me and me.
Друг
4,078
2,096
Застрелись.
C++:
std::string IntToHexString(unsigned int digit) {
    std::stringstream Hex;
    Hex << std::setw(8) << std::hex << digit;
    return Hex.str();
}

Либо на C++20:
C++:
inline std::string IntToHexString(unsigned int digit) {
    return std::format("{:08X}", digit);
}
Я бы еще std::setfill('0') завез в первый вариант
1613765960848.png
 

ishi

Известный
493
110
Пытаюсь сделать окно, сквозь которое можно кликать.
Состав: imgui на opengl + прозрачное, безрамочное окно windows

Проблема в перенаправлении кликов; на примере рабочего стола, я могу кликнуть на ярлык и выделить его, но через раз окно /оверлея/ получает buttondown без buttonup (согласно spy++ прицепленному к моему окну) и левый клик залипает. При этом, физически он отпущен. Полагаю, я создал мешанину из сигналов, но весь день убил -- понять не могу, что делаю не так

Так же пробовал return 0 вместо обработки вообще любых сигналов, при курсоре не наведённом на имгуи окно (именно имгуи, а не его hwnd), но тогда клики просто не проходят (даже без залипания, просто теряется способность кликать насквозь)

Привязка окна, которое будет за imgui окном, осуществляется так:
C++:
 if (ImGui::IsItemActive())
            {
                lmb_ignore = true;
                hwnd_target = WindowFromPoint(cpos);
                GetWindowTextW(hwnd_target, temp_wchar, 256);
                str(temp_wchar, 256, tied_window_text, 256);
            }
            else
                lmb_ignore = false;
WndProc моего окна:
C++:
if (!(target_cursor.x >= overlayWindow[1] - 10
        && target_cursor.x <= overlayWindow[2] + 10
        && target_cursor.y >= overlayWindow[3] - 10
        && target_cursor.y <= overlayWindow[4] + 10))
    {
        if (!lmb_ignore)
            if (hwnd_target)
            {
                ScreenToClient(hwnd_target, &target_cursor);
                SendMessage(hwnd_target, msg, wParam, lParam);
                in_menu = false;
               
            }
    }
    else
        in_menu = true;

    if (oldwndproc)
        return CallWindowProcA((WNDPROC)oldwndproc, _hwnd, msg, wParam, lParam);
    return 0;
 

BASS_DEVSOFTWARE

Известный 🇺🇦
Друг
263
569
Assembler // TASM

Вопрос такой: функция 2Ah возвращает дату.
Всё срабатывает, кроме года, возвращает 07E5 ибо dw т.к. db не пропускает. В чём может быть причина?

Код:
title Date (work.asm)

.model small
.stack 100h
.data

dayOfWeek db ?
day db ?
month db ?
year dw ? ; error if " year db ? " 

.code
main proc
    mov ax,@data
    mov ds,ax

    mov ah,2Ah
    int 21h
  
    mov year,cx ; *
    mov month,dh
    mov day,dl
    mov dayOfWeek,al
  
    ; Завершаем
    mov ax,4C00h
    int 21h
main endp
end main
 
Последнее редактирование: