-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
global void convertIfcCodeToHex(const char* ifcCode, char* hexString) {
int idx = threadIdx.x;
if (idx < 22) {
// Преобразуем символ в бинарное представление
if (ifcCode[idx] >= 'A' && ifcCode[idx] <= 'Z') {
hexString[idx] = '1';
} else {
hexString[idx] = '0';
}
}
}
int main() {
char ifcCode[23]; // 22 символа + 1 для нуль-терминатора
printf("Введите код IFC (22 символа): ");
scanf("%22s", ifcCode);
if (strlen(ifcCode) != 22) {
printf("Некорректная длина кода IFC.\n");
return 1;
}
char* d_ifcCode;
char* d_binaryString;
char binaryString[33] = {0}; // 32 бита + 1 для нуль-терминатора
char hexString[9] = {0}; // 8 символов + 1 для нуль-терминатора
// Выделяем память на GPU
cudaMalloc((void**)&d_ifcCode, 23 * sizeof(char));
cudaMalloc((void**)&d_binaryString, 23 * sizeof(char));
// Копируем данные на GPU
cudaMemcpy(d_ifcCode, ifcCode, 23 * sizeof(char), cudaMemcpyHostToDevice);
// Запускаем ядро
convertIfcCodeToHex<<<1, 22>>>(d_ifcCode, d_binaryString);
// Копируем результат обратно на CPU
cudaMemcpy(binaryString, d_binaryString, 23 * sizeof(char), cudaMemcpyDeviceToHost);
// Заполняем оставшиеся нули до 32 бит
for (int i = 22; i < 32; i++) {
binaryString[i] = '0';
}
binaryString[32] = '\0'; // Нуль-терминатор
// Преобразуем бинарную строку в десятичное значение
int decimalValue = (int)strtol(binaryString, NULL, 2);
// Преобразуем десятичное значение в шестнадцатеричное
sprintf(hexString, "%X", decimalValue);
printf("Шестнадцатеричное представление: %s\n", hexString);
// Освобождаем память на GPU
cudaFree(d_ifcCode);
cudaFree(d_binaryString);
return 0;
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels