C 根据用户输入声明特定宽度变量的最佳方法
我有一个如下所示的代码。如果C 根据用户输入声明特定宽度变量的最佳方法,c,reusability,stdint,C,Reusability,Stdint,我有一个如下所示的代码。如果word\u size=64,则此处的代码为。以类似的方式,我也需要32岁和16岁。我找不到一种方法来重复使用相同的encrypt函数来处理所有大小的文件。此外,我还需要根据单词大小声明变量,即使用uint\u 16或uint\u 32或uint\u 64取决于单词大小。在这种情况下,你能帮我写一个可重用的代码吗 #include<stdio.h> #include<stdint.h> void encrypt(uint64_t* , uin
word\u size=64
,则此处的代码为。以类似的方式,我也需要32岁和16岁。我找不到一种方法来重复使用相同的encrypt
函数来处理所有大小的文件。此外,我还需要根据单词大小声明变量,即使用uint\u 16
或uint\u 32
或uint\u 64
取决于单词大小。在这种情况下,你能帮我写一个可重用的代码吗
#include<stdio.h>
#include<stdint.h>
void encrypt(uint64_t* , uint64_t*, uint64_t*);
int main(){
int block_size;
// Get the user inputs
printf("input the block size: \n");
scanf("%d", &block_size); // can be 32, 64 or 128
int word_size = block_size/2; // 16,32 or 64
// Depending on the word_size, I should declare the variables with
// corresponding width
uint64_t plain_text[2] = {0,0};
uint64_t cipher_text[2] = {0,0};
uint64_t key_text[2] = {0,0};
uint64_t * pt, *ct, *k;
encrypt(pt, ct,k);
}
/*
* Ecnryption Method
*/
void encrypt(uint64_t* pt, uint64_t* ct, uint64_t* k){
// Involves bit shifting algorithm which works only on exact sizes i.e eiter 16,32 or 64.
}
#包括
#包括
无效加密(uint64\u t*、uint64\u t*、uint64\u t*);
int main(){
整块大小;
//获取用户输入
printf(“输入块大小:\n”);
scanf(“%d”,&block_size);//可以是32、64或128
int word\u size=block\u size/2;//16,32或64
//根据单词的大小,我应该用
//相应宽度
uint64纯文本[2]={0,0};
uint64_t密码文本[2]={0,0};
uint64密钥文本[2]={0,0};
uint64_t*pt,*ct,*k;
加密(pt、ct、k);
}
/*
*加密法
*/
无效加密(uint64\u t*pt、uint64\u t*ct、uint64\u t*k){
//涉及位移位算法,该算法仅适用于精确大小,即eiter 16、32或64。
}
如果需要,我可以提供更多信息。在C中有一种方法可以做到这一点-使用
struct
和union
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
enum type {
U64,
U32,
U16,
U8,
};
struct container {
enum type type;
union {
uint64_t u64;
uint32_t u32;
uint16_t u16;
uint8_t u8;
} value;
};
int test(struct container container) {
switch(container.type) {
case U64:
printf("Value is :%" PRIu64 "\n", container.value);
break;
case U32:
printf("Value is :%" PRIu32 "\n", container.value);
break;
case U16:
printf("Value is :%" PRIu16 "\n", container.value);
break;
case U8:
printf("Value is :%" PRIu8 "\n", container.value);
break;
}
return 0;
}
int main(int argc, char **argv) {
struct container c1, c2;
c1.type = U64;
c1.value.u64 = 10000000000ULL;
c2.type = U8;
c2.value.u8 = 100;
test(c1);
test(c2);
return 0;
}
定义具有最大大小的函数,并使其接受附加的宽度参数。然后通过将输入与每种类型的最大值进行比较来确定运行时的宽度。您有使用C++的选项吗?如果你这么做了,那么函数模板将解决你的设计问题。对不起,没有C++选项。“有没有一个简单的方法来解决这个问题?”尤金尼什说。按照你说的做,如果我传递一个较小的值,那么在MSB上用0填充它,使其成为64位,对吗?如果是这种情况,函数将无法执行算法。这就是为什么要传递width参数。你的算法应该研究它并进行自我调整。如果你想让我试着给你一个代码示例,而不是我使用的示例代码,请告诉我。你可能还需要定义不同的位掩码?
Value is :10000000000
Value is :100