2012-03-28 2 views

Antwort

0

C-like Casting sollte funktionieren. Der einzige Unterschied ist, dass Sie cl_ types verwenden. Aber diese entsprechen den C-Typen.

Zum Beispiel, unsigned char zu konvertieren unterzeichnet:

cl_char c = 0xF; 
cl_uchar uc = c; 

einen Zeiger auf signed char Zur Umrechnung in unsigned char auf Zeiger:

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

alle diese 'cl_' Präfix Typen sind API-Typen für den Einsatz in Host-Code. Ich denke nicht, dass das die Frage ist. – talonmies

1

Der Standard OpenCL explicit conversion functions für alle gebaut definiert Skalar- und Vektortypen. So können Sie etwas tun:

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

Talonmies: Danke für die Information. Irgendeine Idee, warum diese Umwandlungsfunktionen anstelle des normalen Castings benötigt werden? –

+0

@Ashwin: Die Fließkommawerte bieten eine explizite Kontrolle über die verschiedenen IEEE-754-Rundungsregeln, was beim Gießen nicht der Fall ist. Die Funktionen unterstützen auch alle OpenCL-spezifischen Vektortypen, die im Standard C99 nicht existieren. Ansonsten denke ich, dass es für eine konsistente Schnittstelle und für bessere Programmierpraktiken ist - sie zwingen den Programmierer, explizit ein Konvertierungsverhalten zu wählen, was IMHO immer eine gute Sache ist. – talonmies

+1

Talonmies: Wenn ich richtig verstehe, gibt es nichts Besonderes, was die Konvertierungsfunktionen für die Konvertierung von Char-uchar tun. In jedem Fall ist Ihre Antwort die bessere und ich werde das Poster bitten, Ihre Wahl zu treffen. –