2012-03-28 4 views

ответ

0

C-like литье должно работать. Единственное различие заключается в том, что вы используете типы cl_. Но они эквивалентны типам C.

Например, чтобы преобразовать подписало неподписанный символ:

cl_char c = 0xF; 
cl_uchar uc = c; 

Чтобы преобразовать указатель подписанного полукокса на указатель на неподписанный символ:

cl_char* cArr = // Points to char array 
cl_uchar* ucArr = (cl_uchar*) cArr; // Access char array as uchar array 
+0

Всех этих 'cl_' типов префиксов является типами API для использования в коде хоста. Я не думаю, что это вопрос. – talonmies

1

Стандарт OpenCL определяет explicit conversion functions для всех встроенного - в скалярном и векторном типах. Так что вы можете сделать что-то вроде этого:

char signed_val = 10; 
uchar unsigned_val = convert_uchar(signed_val); 
+0

Talonmies: Спасибо, что сообщили. Любая идея, почему эти функции преобразования нужны вместо обычного литья? –

+0

@Ashwin: функции с плавающей запятой обеспечивают явный контроль над различными правилами округления IEEE-754, которые нет. Эти функции также поддерживают все типы векторов OpenCL, которые не существуют в стандартном C99. В противном случае я думаю, что это для последовательного интерфейса и для улучшения практики программирования - они заставляют программиста явно выбирать поведение конверсии, которое всегда хорошо ИМХО. – talonmies

+1

Talonmies: Если я правильно понимаю, нет ничего особенного, чтобы функции преобразования выполняли для преобразования char-uchar. В любом случае, ваш лучший ответ, и я попрошу плакат выбрать ваш. –

Смежные вопросы