The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Почему array не возвращает значение 1го элемента массива?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Почему array не возвращает значение 1го элемента массива?"  
Сообщение от geragray email(ok) on 10-Дек-07, 17:24 
Есть 4х байтовый массив
char CNIP[4];

В который я копирую таккже 4 байта
memcpy (CNIP, packet->payload + 16, 4);

А затем пытаюсь вывести на экран первый байт (значение которого кстати в 10й сс = 130)

Вот такой
printf("test %.3d", CNIP[0]);

Дает -126 на экране

А вот если написать так

unsigned char *p;
p = &CNIP;
printf("test %.3d", *p);

На экране появляется искомое чисто 130

Собственно вопрос, разве CNIP[0] не есть обращение к значению первого байта массива? Почему приходится делать финт ушами и выводить значение указателя на первый элемент того же самого массива? Заранее спасибо.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Почему array не возвращает значение 1го элемента массива?"  
Сообщение от Lord ArchDevil email on 10-Дек-07, 17:40 
>[оверквотинг удален]
>
>unsigned char *p;
>p = &CNIP;
>printf("test %.3d", *p);
>
>На экране появляется искомое чисто 130
>
>Собственно вопрос, разве CNIP[0] не есть обращение к значению первого байта массива?
>Почему приходится делать финт ушами и выводить значение указателя на первый
>элемент того же самого массива? Заранее спасибо.

Элементарно.
(signed) char - 1 байтовое число в диапазоне -128 -> +127!
Иными словами, в двоичной системе счисления старший из 8ми битов отвечает за знак числа.
Теперь рассмотрим, что такое 130 - 10000010!
Старший бит (1) указывает, что число отрицательное и в кодировке signed char, как было правильно подмечено, оно равно -126. )
В unsigned же char - всё нормально, поскольку старший бит не является знаковым.

Таким образом никакой ошибки получения значения из первого элемента массива нет, однако имеет весто "неправильная" для вас, но абсолютно правильная с точки зрения машинной арифметики интерпретация хранящегося в ячейке битового значения ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Почему array не возвращает значение 1го элемента массива?"  
Сообщение от geragray email(ok) on 10-Дек-07, 18:08 
Точно! Спасибо.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру