hat*_*irl 3 c++ arrays hex unsigned-char
我想用16个十六进制值初始化一个unsigned char数组.但是,我似乎不知道如何正确初始化/访问这些值.当我试图直观地访问它们时,我根本没有任何价值.
这是我的输出
The program was run with the following command: 4
Please be a value! -----> p
Here's some plaintext
Run Code Online (Sandbox Code Playgroud)
使用以下代码运行时 -
int main(int argc, char** argv)
{
int n;
if (argc > 1) {
n = std::stof(argv[1]);
} else {
std::cerr << "Not enough arguments\n";
return 1;
}
char buff[100];
sprintf(buff,"The program was run with the following command: %d",n);
std::cout << buff << std::endl;
unsigned char plaintext[16] =
{0x0f, 0xb0, 0xc0, 0x0f,
0xa0, 0xa0, 0xa0, 0xa0,
0x00, 0x00, 0xa0, 0xa0,
0x00, 0x00, 0x00, 0x00};
unsigned char test = plaintext[1]^plaintext[2];
std::cout << "Please be a value! -----> " << test << std::endl;
std::cout << "Here's some plaintext " << plaintext[3] << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从背景来看,这是学校集体项目的一部分.我们最终试图实现Serpent密码,但继续被无符号的char数组绊倒.我们的项目规范说我们必须有两个函数来接受Java中的Byte数组.我假设C++中最接近的亲戚是unsigned char [].否则我会使用矢量.在代码的其他地方,我实现了一个setKey函数,该函数接受一个unsigned char数组,将其值打包成4个long long int(密钥需要为256位),并对这些int执行各种位移和xor运算以生成密码算法所必需的密钥.希望有足够的背景来做我想做的事情.我猜我在这里只是忽略了一些基本的C++功能.感谢您的帮助!
A char是一个8位值,能够存储-128 <= n <= +127,经常用于存储不同编码的字符表示,通常用于西方,罗马字母安装 - char用于表示ASCII或utf编码的表示值."编码"表示字符集中的符号/字母已分配数值.将周期表视为元素的编码,使'H'(氢)编码为1,锗编码为32.在ASCII(和UTF-8)表中,位置32表示我们称之为"空格"的字符.
当您operator <<对char值使用时,默认行为是假设您正在向其传递字符编码,例如ASCII字符代码.如果你这样做
char c = 'z';
char d = 122;
char e = 0x7A;
char f = '\x7a';
std::cout << c << d << e << f << "\n";
Run Code Online (Sandbox Code Playgroud)
所有四项任务都是等同的.'z'是一个快捷键/句法糖char(122),0x7A是十六进制为122,'\ x7a'是一个转义,形成一个值为0x7a或122的ascii字符 - iez
许多新程序员出错的地方是他们这样做:
char n = 8;
std::cout << n << endl;
Run Code Online (Sandbox Code Playgroud)
这不会打印"8",它会在ASCII表的第8位打印ASCII字符.
想一想:
char n = 8; // stores the value 8
char n = a; // what does this store?
char n = '8'; // why is this different than the first line?
Run Code Online (Sandbox Code Playgroud)
让我们回顾一下:当你存储120一个变量时,它可以代表ASCII字符'x',但最终存储的只是数值120,简单明了.
具体来说:当你传递122给一个函数,它最终会使用它来查找使用Latin1,ISO-8859-1,UTF-8或类似编码的字符集中的字体条目,那么就120意味着'z'.
在一天结束时,char仅仅是标准的整数值类型中的一种,它可以存储值-128 <= n <= +127,它可以平凡提升为short,int,long或long long,等,等
虽然它通常用于表示字符,但它也经常被用作说"我只存储非常小的值"(例如整数百分比)的方式.
int incoming = 5000;
int outgoing = 4000;
char percent = char(outgoing * 100 / incoming);
Run Code Online (Sandbox Code Playgroud)
如果要打印数值,只需将其提升为不同的值类型:
std::cout << (unsigned int)test << "\n";
std::cout << unsigned int(test) << "\n";
Run Code Online (Sandbox Code Playgroud)
或者首选的C++方式
std::cout << static_cast<unsigned int>(test) << "\n";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25365 次 |
| 最近记录: |