- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 57
- 58
- 59
bool decode_hex(void *p, size_t max_len, const char *hexstr, size_t *out_len_)
{
static const unsigned char hexdigit_val[256] = {
['0'] = 0,
['1'] = 1,
['2'] = 2,
['3'] = 3,
['4'] = 4,
['5'] = 5,
['6'] = 6,
['7'] = 7,
['8'] = 8,
['9'] = 9,
['a'] = 0xa,
['b'] = 0xb,
['c'] = 0xc,
['d'] = 0xd,
['e'] = 0xe,
['f'] = 0xf,
['A'] = 0xa,
['B'] = 0xb,
['C'] = 0xc,
['D'] = 0xd,
['E'] = 0xe,
['F'] = 0xf,};
if (!p || !hexstr)
return false;
if (!strncmp(hexstr, "0x", 2))
hexstr += 2;
if (strlen(hexstr) > (max_len * 2))
return false;
unsigned char *buf = p;
size_t out_len = 0;
while (*hexstr) {
unsigned char c1 = (unsigned char) hexstr[0];
unsigned char c2 = (unsigned char) hexstr[1];
unsigned char v1 = hexdigit_val[c1];
unsigned char v2 = hexdigit_val[c2];
if (!v1 && (c1 != '0'))
return false;
if (!v2 && (c2 != '0'))
return false;
*buf = (v1 << 4) | v2;
out_len++;
buf++;
hexstr += 2;
}
if (out_len_)
*out_len_ = out_len;
return true;
}
1024-- 09.06.2016 22:00 # 0
Питушня, из-за которой "" или "0x" будет способствовать неопределённому поведению в вызывающем коде?
j123123 09.06.2016 22:09 # +3
как-то так.
kipar 09.06.2016 22:24 # +2
b = hexdigit_val(a)*2; //счастливой отладки
j123123 09.06.2016 22:32 # +4
kipar 09.06.2016 22:36 # +3
dxd 10.06.2016 09:32 # +1
Dummy00001 10.06.2016 16:01 # +1
лисперы привнесли главным образом то что макропроцессор может быть полноценной частью высокоуровнего языка. я бы им за это памятник поставил, но они к сожалению в конце решили язык программирования все таки не далать. "lisp is not a programming language - lisp is an environment!"
dxd 10.06.2016 16:20 # +2
Dummy00001 10.06.2016 16:24 # +1
guesto 09.06.2016 22:38 # +2
Fixed
inkanus-gray 09.06.2016 22:40 # +3
roman-kashitsyn 09.06.2016 22:55 # +3
Dummy00001 10.06.2016 16:25 # 0
inkanus-gray 10.06.2016 17:14 # 0
guest 09.06.2016 23:49 # 0
зачем это?
3_dar 09.06.2016 23:52 # +2
kurwa 10.06.2016 00:22 # +3
guest 10.06.2016 12:13 # +2
kurwa 10.06.2016 12:51 # +1
guest 10.06.2016 13:06 # +1
kurwa-nextgen 10.06.2016 14:39 # +1
j123123 10.06.2016 14:45 # +2
Antervis 13.06.2016 03:53 # +1
j123123 13.06.2016 22:29 # +2
Компиляторы повсюду
А если серьезно, то программа, которая из мнемоник делает двоичные инструкции проца это скорее транслятор, чем компилятор. В компиляторе куча какой-то ебнутой херни например парсим код на си, строим AST, потом переводим из AST в какое-то говно, потом из этого говна еще в какое-то SSA говно, пойди исходники GCC читни
CHayT 14.06.2016 15:39 # 0
это как напитон, только хуже?
bormand 14.06.2016 15:45 # 0
Не, тогда тебя бы послали читать реализацию STL в libstdc++. Я не утверждаю, что она плохая. Просто нечитабельная.
CHayT 14.06.2016 16:10 # 0
j123123 17.06.2016 07:32 # +1
И там используется эта хрень с goto через метки в массиве
inkanus-gray 17.06.2016 11:48 # 0
guest 17.06.2016 12:06 # +1
3.14159265 13.06.2016 17:28 # 0
j123123 10.06.2016 00:28 # +1
guest 10.06.2016 11:44 # +2
Dummy00001 10.06.2016 16:26 # 0
TarasB 10.06.2016 12:05 # 0
guest 10.06.2016 12:12 # 0
j123123 10.06.2016 12:16 # 0
guest 10.06.2016 12:49 # +1
inkanus-gray 10.06.2016 13:46 # 0
guestinho 10.06.2016 14:31 # +2
ага
inkanus-gray 10.06.2016 14:48 # +1
guest 10.06.2016 15:25 # +1
dxd 10.06.2016 16:20 # +1
Dummy00001 10.06.2016 16:28 # +1
j123123 10.06.2016 16:37 # 0
Dummy00001 10.06.2016 16:57 # +1
bormand 12.06.2016 05:58 # +1
LispGovno 17.06.2016 12:13 # 0