diff --git a/misc/benc.c b/misc/benc.c
index 96fdd34..5f25769 100644
--- a/misc/benc.c
+++ b/misc/benc.c
@@ -133,18 +133,12 @@ benc_mem(const char *p, size_t *len, const char**next)
 {
     if (!benc_isstr(p))
         return NULL;
-    size_t blen = 0;
-    blen = *p - '0';
-    p++;
-    while (isdigit(*p)) {
-        blen *= 10;
-        blen += *p - '0';
-        p++;
-    }
-    assert(*p == ':');
+    char *endptr;
+    size_t blen = strtoul(p, &endptr, 10);
+    assert(*endptr == ':');
     benc_safeset(len, blen);
-    benc_safeset(next, *(p + blen + 1) == 'e' ? NULL : p + blen + 1);
-    return p + 1;
+    benc_safeset(next, *(endptr + blen + 1) == 'e' ? NULL : endptr + blen + 1);
+    return endptr + 1;
 }
 
 char *