Decimal, hex і binary у MIDI: числа 0–127 та байти 0–255
Зображення створено за допомогою генеративного ШІ для MIDITAUR. Концепція, композиція та текстове наповнення — MIDITAUR
Зміст публікації

У MIDI часто доводиться бачити одне й те саме число у трьох записах: десятковому (60), шістнадцятковому (0x3C) і двійковому (0111100). Це не три різні значення — це три способи записати те саме число.
Чому в MIDI так часто зустрічається 0–127
Класичні MIDI 1.0 data bytes використовують 7 значущих бітів, тому багато параметрів мають діапазон 0–127. Наприклад, номер ноти, velocity або значення більшості Control Change.
Старший біт байта використовується для розрізнення типів байтів: у status byte він дорівнює 1, а у data byte — 0. Саме тому повний байт має 0–255, але звичайне 7-бітне MIDI-значення — 0–127.
Як читати hex
Шістнадцяткова система використовує цифри 0–9 і літери A–F.
Одна hex-цифра представляє рівно 4 біти — nibble. Тому повний 8-бітний байт записується двома hex-цифрами: наприклад, 0x90 = 1001 0000.
Останній приклад особливо корисний: 0x90 — status byte Note On для MIDI-каналу 1.
Таблиця 7-бітних значень 0–127
| Dec | Hex | Binary |
|---|---|---|
| 0 | 0x00 |
0000000 |
| 1 | 0x01 |
0000001 |
| 2 | 0x02 |
0000010 |
| 3 | 0x03 |
0000011 |
| 4 | 0x04 |
0000100 |
| 5 | 0x05 |
0000101 |
| 6 | 0x06 |
0000110 |
| 7 | 0x07 |
0000111 |
| 8 | 0x08 |
0001000 |
| 9 | 0x09 |
0001001 |
| 10 | 0x0A |
0001010 |
| 11 | 0x0B |
0001011 |
| 12 | 0x0C |
0001100 |
| 13 | 0x0D |
0001101 |
| 14 | 0x0E |
0001110 |
| 15 | 0x0F |
0001111 |
| 16 | 0x10 |
0010000 |
| 17 | 0x11 |
0010001 |
| 18 | 0x12 |
0010010 |
| 19 | 0x13 |
0010011 |
| 20 | 0x14 |
0010100 |
| 21 | 0x15 |
0010101 |
| 22 | 0x16 |
0010110 |
| 23 | 0x17 |
0010111 |
| 24 | 0x18 |
0011000 |
| 25 | 0x19 |
0011001 |
| 26 | 0x1A |
0011010 |
| 27 | 0x1B |
0011011 |
| 28 | 0x1C |
0011100 |
| 29 | 0x1D |
0011101 |
| 30 | 0x1E |
0011110 |
| 31 | 0x1F |
0011111 |
| 32 | 0x20 |
0100000 |
| 33 | 0x21 |
0100001 |
| 34 | 0x22 |
0100010 |
| 35 | 0x23 |
0100011 |
| 36 | 0x24 |
0100100 |
| 37 | 0x25 |
0100101 |
| 38 | 0x26 |
0100110 |
| 39 | 0x27 |
0100111 |
| 40 | 0x28 |
0101000 |
| 41 | 0x29 |
0101001 |
| 42 | 0x2A |
0101010 |
| 43 | 0x2B |
0101011 |
| 44 | 0x2C |
0101100 |
| 45 | 0x2D |
0101101 |
| 46 | 0x2E |
0101110 |
| 47 | 0x2F |
0101111 |
| 48 | 0x30 |
0110000 |
| 49 | 0x31 |
0110001 |
| 50 | 0x32 |
0110010 |
| 51 | 0x33 |
0110011 |
| 52 | 0x34 |
0110100 |
| 53 | 0x35 |
0110101 |
| 54 | 0x36 |
0110110 |
| 55 | 0x37 |
0110111 |
| 56 | 0x38 |
0111000 |
| 57 | 0x39 |
0111001 |
| 58 | 0x3A |
0111010 |
| 59 | 0x3B |
0111011 |
| 60 | 0x3C |
0111100 |
| 61 | 0x3D |
0111101 |
| 62 | 0x3E |
0111110 |
| 63 | 0x3F |
0111111 |
| 64 | 0x40 |
1000000 |
| 65 | 0x41 |
1000001 |
| 66 | 0x42 |
1000010 |
| 67 | 0x43 |
1000011 |
| 68 | 0x44 |
1000100 |
| 69 | 0x45 |
1000101 |
| 70 | 0x46 |
1000110 |
| 71 | 0x47 |
1000111 |
| 72 | 0x48 |
1001000 |
| 73 | 0x49 |
1001001 |
| 74 | 0x4A |
1001010 |
| 75 | 0x4B |
1001011 |
| 76 | 0x4C |
1001100 |
| 77 | 0x4D |
1001101 |
| 78 | 0x4E |
1001110 |
| 79 | 0x4F |
1001111 |
| 80 | 0x50 |
1010000 |
| 81 | 0x51 |
1010001 |
| 82 | 0x52 |
1010010 |
| 83 | 0x53 |
1010011 |
| 84 | 0x54 |
1010100 |
| 85 | 0x55 |
1010101 |
| 86 | 0x56 |
1010110 |
| 87 | 0x57 |
1010111 |
| 88 | 0x58 |
1011000 |
| 89 | 0x59 |
1011001 |
| 90 | 0x5A |
1011010 |
| 91 | 0x5B |
1011011 |
| 92 | 0x5C |
1011100 |
| 93 | 0x5D |
1011101 |
| 94 | 0x5E |
1011110 |
| 95 | 0x5F |
1011111 |
| 96 | 0x60 |
1100000 |
| 97 | 0x61 |
1100001 |
| 98 | 0x62 |
1100010 |
| 99 | 0x63 |
1100011 |
| 100 | 0x64 |
1100100 |
| 101 | 0x65 |
1100101 |
| 102 | 0x66 |
1100110 |
| 103 | 0x67 |
1100111 |
| 104 | 0x68 |
1101000 |
| 105 | 0x69 |
1101001 |
| 106 | 0x6A |
1101010 |
| 107 | 0x6B |
1101011 |
| 108 | 0x6C |
1101100 |
| 109 | 0x6D |
1101101 |
| 110 | 0x6E |
1101110 |
| 111 | 0x6F |
1101111 |
| 112 | 0x70 |
1110000 |
| 113 | 0x71 |
1110001 |
| 114 | 0x72 |
1110010 |
| 115 | 0x73 |
1110011 |
| 116 | 0x74 |
1110100 |
| 117 | 0x75 |
1110101 |
| 118 | 0x76 |
1110110 |
| 119 | 0x77 |
1110111 |
| 120 | 0x78 |
1111000 |
| 121 | 0x79 |
1111001 |
| 122 | 0x7A |
1111010 |
| 123 | 0x7B |
1111011 |
| 124 | 0x7C |
1111100 |
| 125 | 0x7D |
1111101 |
| 126 | 0x7E |
1111110 |
| 127 | 0x7F |
1111111 |
Повна таблиця 8-бітних значень 0–255
Первинний матеріал містив повну таблицю 0–255. Нижче вона відновлена у компактному форматі з чотирма групами на рядок. Це довідник для повного 8-бітного byte; у звичайних MIDI 1.0 data bytes значущий діапазон зазвичай 0–127, тоді як status bytes мають старший біт 1.
| Dec | Hex | Binary | Dec | Hex | Binary | Dec | Hex | Binary | Dec | Hex | Binary |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0x00 | 00000000 | 64 | 0x40 | 01000000 | 128 | 0x80 | 10000000 | 192 | 0xC0 | 11000000 |
| 1 | 0x01 | 00000001 | 65 | 0x41 | 01000001 | 129 | 0x81 | 10000001 | 193 | 0xC1 | 11000001 |
| 2 | 0x02 | 00000010 | 66 | 0x42 | 01000010 | 130 | 0x82 | 10000010 | 194 | 0xC2 | 11000010 |
| 3 | 0x03 | 00000011 | 67 | 0x43 | 01000011 | 131 | 0x83 | 10000011 | 195 | 0xC3 | 11000011 |
| 4 | 0x04 | 00000100 | 68 | 0x44 | 01000100 | 132 | 0x84 | 10000100 | 196 | 0xC4 | 11000100 |
| 5 | 0x05 | 00000101 | 69 | 0x45 | 01000101 | 133 | 0x85 | 10000101 | 197 | 0xC5 | 11000101 |
| 6 | 0x06 | 00000110 | 70 | 0x46 | 01000110 | 134 | 0x86 | 10000110 | 198 | 0xC6 | 11000110 |
| 7 | 0x07 | 00000111 | 71 | 0x47 | 01000111 | 135 | 0x87 | 10000111 | 199 | 0xC7 | 11000111 |
| 8 | 0x08 | 00001000 | 72 | 0x48 | 01001000 | 136 | 0x88 | 10001000 | 200 | 0xC8 | 11001000 |
| 9 | 0x09 | 00001001 | 73 | 0x49 | 01001001 | 137 | 0x89 | 10001001 | 201 | 0xC9 | 11001001 |
| 10 | 0x0A | 00001010 | 74 | 0x4A | 01001010 | 138 | 0x8A | 10001010 | 202 | 0xCA | 11001010 |
| 11 | 0x0B | 00001011 | 75 | 0x4B | 01001011 | 139 | 0x8B | 10001011 | 203 | 0xCB | 11001011 |
| 12 | 0x0C | 00001100 | 76 | 0x4C | 01001100 | 140 | 0x8C | 10001100 | 204 | 0xCC | 11001100 |
| 13 | 0x0D | 00001101 | 77 | 0x4D | 01001101 | 141 | 0x8D | 10001101 | 205 | 0xCD | 11001101 |
| 14 | 0x0E | 00001110 | 78 | 0x4E | 01001110 | 142 | 0x8E | 10001110 | 206 | 0xCE | 11001110 |
| 15 | 0x0F | 00001111 | 79 | 0x4F | 01001111 | 143 | 0x8F | 10001111 | 207 | 0xCF | 11001111 |
| 16 | 0x10 | 00010000 | 80 | 0x50 | 01010000 | 144 | 0x90 | 10010000 | 208 | 0xD0 | 11010000 |
| 17 | 0x11 | 00010001 | 81 | 0x51 | 01010001 | 145 | 0x91 | 10010001 | 209 | 0xD1 | 11010001 |
| 18 | 0x12 | 00010010 | 82 | 0x52 | 01010010 | 146 | 0x92 | 10010010 | 210 | 0xD2 | 11010010 |
| 19 | 0x13 | 00010011 | 83 | 0x53 | 01010011 | 147 | 0x93 | 10010011 | 211 | 0xD3 | 11010011 |
| 20 | 0x14 | 00010100 | 84 | 0x54 | 01010100 | 148 | 0x94 | 10010100 | 212 | 0xD4 | 11010100 |
| 21 | 0x15 | 00010101 | 85 | 0x55 | 01010101 | 149 | 0x95 | 10010101 | 213 | 0xD5 | 11010101 |
| 22 | 0x16 | 00010110 | 86 | 0x56 | 01010110 | 150 | 0x96 | 10010110 | 214 | 0xD6 | 11010110 |
| 23 | 0x17 | 00010111 | 87 | 0x57 | 01010111 | 151 | 0x97 | 10010111 | 215 | 0xD7 | 11010111 |
| 24 | 0x18 | 00011000 | 88 | 0x58 | 01011000 | 152 | 0x98 | 10011000 | 216 | 0xD8 | 11011000 |
| 25 | 0x19 | 00011001 | 89 | 0x59 | 01011001 | 153 | 0x99 | 10011001 | 217 | 0xD9 | 11011001 |
| 26 | 0x1A | 00011010 | 90 | 0x5A | 01011010 | 154 | 0x9A | 10011010 | 218 | 0xDA | 11011010 |
| 27 | 0x1B | 00011011 | 91 | 0x5B | 01011011 | 155 | 0x9B | 10011011 | 219 | 0xDB | 11011011 |
| 28 | 0x1C | 00011100 | 92 | 0x5C | 01011100 | 156 | 0x9C | 10011100 | 220 | 0xDC | 11011100 |
| 29 | 0x1D | 00011101 | 93 | 0x5D | 01011101 | 157 | 0x9D | 10011101 | 221 | 0xDD | 11011101 |
| 30 | 0x1E | 00011110 | 94 | 0x5E | 01011110 | 158 | 0x9E | 10011110 | 222 | 0xDE | 11011110 |
| 31 | 0x1F | 00011111 | 95 | 0x5F | 01011111 | 159 | 0x9F | 10011111 | 223 | 0xDF | 11011111 |
| 32 | 0x20 | 00100000 | 96 | 0x60 | 01100000 | 160 | 0xA0 | 10100000 | 224 | 0xE0 | 11100000 |
| 33 | 0x21 | 00100001 | 97 | 0x61 | 01100001 | 161 | 0xA1 | 10100001 | 225 | 0xE1 | 11100001 |
| 34 | 0x22 | 00100010 | 98 | 0x62 | 01100010 | 162 | 0xA2 | 10100010 | 226 | 0xE2 | 11100010 |
| 35 | 0x23 | 00100011 | 99 | 0x63 | 01100011 | 163 | 0xA3 | 10100011 | 227 | 0xE3 | 11100011 |
| 36 | 0x24 | 00100100 | 100 | 0x64 | 01100100 | 164 | 0xA4 | 10100100 | 228 | 0xE4 | 11100100 |
| 37 | 0x25 | 00100101 | 101 | 0x65 | 01100101 | 165 | 0xA5 | 10100101 | 229 | 0xE5 | 11100101 |
| 38 | 0x26 | 00100110 | 102 | 0x66 | 01100110 | 166 | 0xA6 | 10100110 | 230 | 0xE6 | 11100110 |
| 39 | 0x27 | 00100111 | 103 | 0x67 | 01100111 | 167 | 0xA7 | 10100111 | 231 | 0xE7 | 11100111 |
| 40 | 0x28 | 00101000 | 104 | 0x68 | 01101000 | 168 | 0xA8 | 10101000 | 232 | 0xE8 | 11101000 |
| 41 | 0x29 | 00101001 | 105 | 0x69 | 01101001 | 169 | 0xA9 | 10101001 | 233 | 0xE9 | 11101001 |
| 42 | 0x2A | 00101010 | 106 | 0x6A | 01101010 | 170 | 0xAA | 10101010 | 234 | 0xEA | 11101010 |
| 43 | 0x2B | 00101011 | 107 | 0x6B | 01101011 | 171 | 0xAB | 10101011 | 235 | 0xEB | 11101011 |
| 44 | 0x2C | 00101100 | 108 | 0x6C | 01101100 | 172 | 0xAC | 10101100 | 236 | 0xEC | 11101100 |
| 45 | 0x2D | 00101101 | 109 | 0x6D | 01101101 | 173 | 0xAD | 10101101 | 237 | 0xED | 11101101 |
| 46 | 0x2E | 00101110 | 110 | 0x6E | 01101110 | 174 | 0xAE | 10101110 | 238 | 0xEE | 11101110 |
| 47 | 0x2F | 00101111 | 111 | 0x6F | 01101111 | 175 | 0xAF | 10101111 | 239 | 0xEF | 11101111 |
| 48 | 0x30 | 00110000 | 112 | 0x70 | 01110000 | 176 | 0xB0 | 10110000 | 240 | 0xF0 | 11110000 |
| 49 | 0x31 | 00110001 | 113 | 0x71 | 01110001 | 177 | 0xB1 | 10110001 | 241 | 0xF1 | 11110001 |
| 50 | 0x32 | 00110010 | 114 | 0x72 | 01110010 | 178 | 0xB2 | 10110010 | 242 | 0xF2 | 11110010 |
| 51 | 0x33 | 00110011 | 115 | 0x73 | 01110011 | 179 | 0xB3 | 10110011 | 243 | 0xF3 | 11110011 |
| 52 | 0x34 | 00110100 | 116 | 0x74 | 01110100 | 180 | 0xB4 | 10110100 | 244 | 0xF4 | 11110100 |
| 53 | 0x35 | 00110101 | 117 | 0x75 | 01110101 | 181 | 0xB5 | 10110101 | 245 | 0xF5 | 11110101 |
| 54 | 0x36 | 00110110 | 118 | 0x76 | 01110110 | 182 | 0xB6 | 10110110 | 246 | 0xF6 | 11110110 |
| 55 | 0x37 | 00110111 | 119 | 0x77 | 01110111 | 183 | 0xB7 | 10110111 | 247 | 0xF7 | 11110111 |
| 56 | 0x38 | 00111000 | 120 | 0x78 | 01111000 | 184 | 0xB8 | 10111000 | 248 | 0xF8 | 11111000 |
| 57 | 0x39 | 00111001 | 121 | 0x79 | 01111001 | 185 | 0xB9 | 10111001 | 249 | 0xF9 | 11111001 |
| 58 | 0x3A | 00111010 | 122 | 0x7A | 01111010 | 186 | 0xBA | 10111010 | 250 | 0xFA | 11111010 |
| 59 | 0x3B | 00111011 | 123 | 0x7B | 01111011 | 187 | 0xBB | 10111011 | 251 | 0xFB | 11111011 |
| 60 | 0x3C | 00111100 | 124 | 0x7C | 01111100 | 188 | 0xBC | 10111100 | 252 | 0xFC | 11111100 |
| 61 | 0x3D | 00111101 | 125 | 0x7D | 01111101 | 189 | 0xBD | 10111101 | 253 | 0xFD | 11111101 |
| 62 | 0x3E | 00111110 | 126 | 0x7E | 01111110 | 190 | 0xBE | 10111110 | 254 | 0xFE | 11111110 |
| 63 | 0x3F | 00111111 | 127 | 0x7F | 01111111 | 191 | 0xBF | 10111111 | 255 | 0xFF | 11111111 |
Практичні межі видно одразу: 0x7F = 127 = 01111111, а 0x80 = 128 = 10000000. Саме перехід між цими значеннями змінює старший біт з 0 на 1.
Як це пов’язано з MIDI 1.0
Актуальна MIDI Association reference table показує status bytes у діапазоні 0x80–0xFF як 8-бітні значення зі старшим бітом 1, а Control Change data bytes — як значення 0–127 зі старшим бітом 0. Це і є практична причина, чому в MIDI-коді часто одночасно бачимо повні bytes 128–255 і data values 0–127.
Практичний приклад
Повідомлення Note On для ноти Middle C з velocity 100 можна записати так:
- decimal:
144, 60, 100; - hex:
0x90, 0x3C, 0x64; - binary:
10010000, 00111100, 01100100.
Тому в MIDI-коді hex часто зручний для status bytes, а decimal — для значень, які люди звикли рахувати як 0–127.