在将const字符分配给C ++中的unsigned char数组时出错 [英] error in assigning a const character to an unsigned char array in C++

查看:128
本文介绍了在将const字符分配给C ++中的unsigned char数组时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

typedef unsigned long int WORD;  /* Should be 32-bit = 4 bytes        */
#define w         32             /* word size in bits                 */
#define r         12             /* number of rounds                  */
#define b         16             /* number of bytes in key            */
#define c          4             /* number words in key               */
                                 /* c = max(1,ceil(8*b/w))            */
#define t         26             /* size of table S = 2*(r+1) words   */
WORD S [t],L[c];                        /* expanded key table         */
WORD P = 0xb7e15163, Q = 0x9e3779b9;    /* magic constants            */
/* Rotation operators. x must be unsigned, to get logical right shift*/
#define ROTL(x,y) (((x)<<(y&(w-1))) | ((x)>>(w-(y&(w-1)))))
#define ROTR(x,y) (((x)>>(y&(w-1))) | ((x)<<(w-(y&(w-1)))))    

void RC5_DECRYPT(WORD *ct, WORD *pt) /* 2 WORD input ct/output pt     */
{
    WORD i, B = ct[1], A = ct[0];
    for (i = r; i > 0; i--)
    {
        B = ROTR(B - S[2 * i + 1], A)^A;
        A = ROTR(A - S[2 * i], B)^B;
    }
    pt[1] = B - S[1]; pt[0] = A - S[0];
}

void RC5_SETUP(unsigned char *K) /* secret input key K 0...b-1]       */
{
    WORD i, j, k, u = w/8, A, B, L[c];

    /* Initialize L, then S, then mix key into S */
    for (i = b - 1, L[c - 1] = 0; i != -1; i--) 
        L[i/u] = (L[i/u] << 8) + K[i];

    for (S[0] = P, i = 1; i < t; i++) 
        S[i] = S[i - 1] + Q;

    for (A=B=i=j=k=0; k<3*t; k++,i=(i+1)%t,j=(j+1)%c)      /* 3*t > 3*c */
    {
        A = S[i] = ROTL(S [i]+(A+B),3);
        B = L[j] = ROTL(L[j]+(A+B),(A+B));
    }
}

void printword(WORD A)
{
    WORD k;
    for (k=0 ;k<w; k+=8) 
        printf("%02.2lX",(A>>k)&0xFF);
}

int main()
{ 
    WORD i, j, k, pt [2], pt2 [2], ct [2] = {0,0};
    unsigned char key[b];
    ofstream out("cpt.txt");
    ifstream in("key.txt");

    if (!in)
    { 
        cout << "Cannot open file.\n"; 
        return 1; 
    }  

    if (!out)
    { 
        cout << "Cannot open file.\n"; 
        return 1; 
    }  

    key="111111000001111";

    RC5_SETUP(key);
    ct[0]=2185970173;
    ct[1]=3384368406;

    for (i=1; i<2; i++)
    {
         RC5_DECRYPT(ct,pt2);
         printf("\n   plaintext "); 
         printword(pt[0]); 
         printword(pt[1]);
    }

    return 0;
}

当我编译这个代码时,我得到两个警告,不能为我的字符数组分配一个char值。为什么?

When I compile this code i get two warnings and also an error saying that I cant assign a char value to my character array. Why is that?

推荐答案

更改:

key =111111000001111;

strncpy((char *)key,111111000001111,sizeof(key));

这篇关于在将const字符分配给C ++中的unsigned char数组时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆