簡體   English   中英

在C中將char數組轉換為ULL時不匹配,反之亦然

[英]Mismatch when converting an char array into ULLs and vice versa in C

我有一個巨大的2048位字符串(例如,字符串“加密”的長度為256),它可以采用隨機值,這意味着不必要的ASCII值。 我的目標是將其分塊為無符號的long long(ULL)值,以用於某些自定義操作(僅對ULL進行操作),然后從分塊的ULL中恢復原始字符串。 (我的計算機是Little Endian和64位)

我有以下代碼,我的目標是使加密的2匹配加密。 但是,以下代碼不正確。 我認為它與字節序混亂,因此我沒有找回原始的字符串內容。 誰能幫助我解決問題或提出解決方案?

unsigned long long val, longInt;
char buffer[9];
buffer[8] = '\0';
char byteArray[9];
byteArray[8] = '\0';

for(chunk = 0; chunk < 32; chunk++) {
    strncpy(buffer, encrypted + 8 * chunk, 8);
    val = (uint64_t)buffer[0] << 56 |
          (uint64_t)buffer[1] << 48 |
          (uint64_t)buffer[2] << 40 |
          (uint64_t)buffer[3] << 32 |
          (uint64_t)buffer[4] << 24 |
          (uint64_t)buffer[5] << 16 |
          (uint64_t)buffer[6] << 8  |
          (uint64_t)buffer[7];
    vals[chunk] = val;
}

for (chunk = 0; chunk < 32; chunk++) {
    longInt = vals[chunk];
    byteArray[0] = (char)((longInt >> 56) & 0xFF);
    byteArray[1] = (char)((longInt >> 48) & 0xFF);
    byteArray[2] = (char)((longInt >> 40) & 0xFF);
    byteArray[3] = (char)((longInt >> 32) & 0xFF);
    byteArray[4] = (char)((longInt >> 24) & 0xFF);
    byteArray[5] = (char)((longInt >> 16) & 0xFF);
    byteArray[6] = (char)((longInt >> 8) & 0xFF);
    byteArray[7] = (char)((longInt) & 0xFF);
    strncpy(encrypted2 + chunk * 8, byteArray, 8);
}

請幫助我在上面的代碼中匹配加密和加密2。

加密[256]的示例輸入為

C���EK�U�ߺA#|��-��fDJ�J
ڰ���.�2(��+<��^���r0��v�.�'��GR�M��,52�����{r7RPqRD1�ú
                                                          ��q4�iP��E�Cm��$
���Z�+�Q��&Xx�F0� X#(���N���6r�R�`�]"gvV2[)��75��)

使用char數組時,不使用字符串 :應該使用memcpy而不是strncpy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM