/*
十进制转二进制: ToBase(a, 2)

十进制转十六进制: ToBase(a, 16)

十进制转八进制: ToBase(a, 8)

十进制转n进制: ToBase(a, n)

十六进制转n进制: ToBase(a, n) ,a为16进制数,以“0X”开头
*/

; 自带的10进制转16进制
MsgBox % Format("0x{:X}", 16777215)  ; 带0x的大写 => 0xFFFFFF
MsgBox % Format("{:x}", 16777215)  ; 不带0x的小写 => ffffff

MsgBox % Format("0x{:X}", 255)  ; RGB红色 => 0xFF
MsgBox % Format("{:#x}", 255)  ; RGB红色 => 0xff

c:=255
MsgBox % Format("0x{:X}", ((c&0xFF)<<16)|(c&0xFF00)|((c&0xFF0000)>>16))  ; RGB红色补全写法 => 0xFF0000

; MsgBox % StrReplace(Format("{:-8}", Format("0x{:X}", 255)), " ", 0)  ; RGB红色补全写法 => 0xFF0000【会变BGR】

; 16进制+0直接转换成10进制输出
WinGet, Hwnd, ID, ahk_class HH Parent
MsgBox % Hwnd+0

MsgBox % ToBase(0x800080,10)  ; => 8388736
MsgBox % ToBase(0xFF,10)  ; => 255
MsgBox % ToBase(255,16)  ; => FF

ToBase(n, b) {
  return (n < b ? "" : ToBase(n//b,b)) . ((d:=Mod(n,b)) < 10 ? d : Chr(d+55))
}

; 二进制字符串转换为十六进制【去掉Format函数为十进制】
bin := "1111100110111110"
MsgBox % Format("0x{:X}", DllCall("msvcrt\_wcstoui64", "Str", bin, "Ptr", 0, "Int", 2, "Cdecl Int64")) ; => 0xF9BE

; DllCall("msvcrt\_i64tow", "UInt64", 0xF9BE, "Ptr", buf := Buffer(128), "Int", 2, "Cdecl")
; MsgBox StrGet(buf)  ; V2写法

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。