如何在 OpenCL 中将小写转换为大写,反之亦然

How to convert lowercase to uppercase in OpenCL or vise-versa

本文关键字:转换 反之亦然 OpenCL      更新时间:2023-10-16

嗨,我有一个包含一些特殊字符和小写字母的 char16 向量,可以检查每个字符,如果:

1.(是字母表吗?如果是,那么我会将其转换为小写字母,反之亦然

2.( 如果是特殊字符或空格(例如。' ' 或 ' " ' 又名 apos 或 ',' 或 '-' 等,那么我会保持原样

下面是我未完成的内核,在将我的字符移动"n"量之前,我想检查每个字符是否是字符并将其转换为大写/小写

__kernel void A2_T2_B(      
__global int n,
__global char16* char_vec,
__global char* encrypted,
__global char* decrypted        ) {

int i = get_global_id(0);

if (n>0)
{
if(any(char_vec[i]=='z')==1))
{
}
char_vec[i]+=n;
}
else if(n<0)
{
char_vec[i]-=n;
}
}

OpenCL 没有任何内置的字符串处理函数,如果这是你要问的。您需要自己实现它们,或找到第三方库。

我们没有一个通用的答案,因为实现将在很大程度上取决于编码。对于纯 ASCII,您可以使用以下内容:

bool isupper(char c)
{
return (c >= 'a' && c <= 'z');
}

只需添加这个简单的转换条件

for (int i = 0; arr[i] != 'n'; i++) {
if (arr[i] <= 'a' && arr[i] >= 'z') {
arr[i] = (int)arr[i] - 32;     // A: 65, a: 97 ;  a - A = 32
// or   arr[i] = arr[i] - ' ';
}
}