Байтовое чтение из памяти: "signed char *" vs "unsigned char *"

Часто требуется читать из памяти по одному байту за раз, как в этой наивной реализации memcpy():

void *memcpy(void *dest, const void *src, size_t n)
{
    char *from = (char *)src;
    char *to   = (char *)dest;

    while(n--) *to++ = *from++;

    return dest;
}

Однако иногда я вижу, что люди явно используют unsigned char * вместо просто char *.

Конечно, char и unsigned char могут быть не равны. Но есть ли разница, использую ли я char *, signed char * или unsigned char * при байтовом чтении/записи памяти?

UPDATE: На самом деле, я прекрасно понимаю, что c=200 может иметь разные значения в зависимости от типа c. Меня интересует, почему люди иногда используют unsigned char * вместо char * при чтении памяти, например, чтобы сохранить uint32_t в char[4].

17
задан Philip 5 December 2011 в 13:31
поделиться