如何通过参数插入文本并将其自动转换为十六进制?
我尝试过:
unsigned char aesKey[32] = argv[1];
但得到错误
输出如下:
unsigned char aesKey[32] = {
0x53, 0x28, 0x40, 0x6e, 0x2f, 0x64, 0x63, 0x5d, 0x2d, 0x61, 0x77, 0x40, 0x76, 0x71, 0x77, 0x28,
0x74, 0x61, 0x7d, 0x66, 0x61, 0x73, 0x3b, 0x5d, 0x66, 0x6d, 0x3c, 0x3f, 0x7b, 0x66, 0x72, 0x36
};
unsigned char *buf;
aes256_context ctx;
aes256_init(&ctx, aesKey);
for (unsigned long i = 0; i < lSize/16; i++) {
buf = text + (i * 16);
aes256_encrypt_ecb(&ctx, buf);
}
aes256_done(&ctx);
提前致谢
最佳答案
在C和C ++中,当您有类似
char name[]="John Smith";
编译器会在编译时知道该char数组的大小以及所有值。因此,它可以在堆栈帧上分配它并为其分配值。
当你有类似的代码
char * strptr = foo();
char str [] = strptr;
编译器不知道strptr指向的字符串的大小和值是什么。这就是为什么在C / C ++中不允许这样做。
换句话说,只能将字符串文字分配给char数组,并且也只能在声明时将其分配给char数组。
所以
char name[] = "John Smith";
被允许。
char name[32];
name = "John Smith";
不被允许。
使用memcpy
因此,您可以使用memcpy。 (或使用其他人暗示的c ++替代方法)
unsigned char *aesKey;
size_t len = (strlen(argv[1])+1)*sizeof(unsigned char);
aesKey = malloc(len);
memcpy(aesKey, argv[1], len);
旧的解决方案
(这是我以前的答案,上面的答案更好)
因此,您需要使用strncpy。
unsigned char aesKey[32];
strncpy((char *) aesKey, argv[1], 32);
注意该例程是strncpy而不是strcpy。 strcpy是不安全的。 (感谢PRouleau的arg修复程序)
如果strncpy在Visual Studio中不可用,那么您可能必须尝试strcpy_s(感谢Google:user:427390)
关于c++ - 传递参数并将其转换为十六进制时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14290496/