我有两个char8向量。我想检查一下它们是否相等。
使用all函数时出现错误:
char8 a1 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a2 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
if (isequal(a1, a2)) return 0; // error on this line
我也尝试过:
char8 a1 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a2 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a3 = a1 - a2;
if (all(a3 == 0)) return 0; // error: can't convert from char to int
答案 0 :(得分:1)
OpenCL的isequal()
函数是only defined for the floating-point vector & scalar types,所以这就是您的第一种方法不起作用的原因。
您的第二种方法是正确的;我认为问题在于您正在将char8
(a3
)与int
(0
)进行比较。实际上,您实际上不需要减去向量,等式应该可以正常工作(向量比较运算符得出-1
为真,因此all()
的MSB测试应该可以。):
char8 a1 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a2 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
if (all(a1 == a2))
return 0;
或者,您可以将减法的最后一行更改为:
if (all(a3 == (char8)(0))) return 0;
当您再次将char8
与另一个char8
(全为0)进行比较时,这也应该起作用。
答案 1 :(得分:-1)
您需要使用memcmp
函数。
#define MIN(x,y) ((x) > (y) ? (y) : (x))
memcmp(a,b, MIN(sizeof(a), sizeof(b)));
#include <string.h> int memcmp(const void *s1, const void *s2, size_t n);
memcmp()函数返回小于,等于或
的整数 如果分别找到s1的前n个字节,则大于零,
小于,匹配或大于
的前n个字节 s2。对于非零返回值,符号由的符号决定 第一对字节之间的差异(解释为 s1和s2不同的无符号字符)。
如果n为零,则返回值为零。