- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个巨大的 2048 位字符串(例如,长度为 256 的“加密”字符串)它可以采用随机值,这意味着不需要 ASCII 值。我的目标是将其分块为无符号长整型 (ULL) 值以用于某些自定义操作(仅在 ULL 上运行)并从分块的 ULL 恢复原始字符串。 (我的电脑是 little endian 和 64 位)
我有以下代码,我的目标是使 encrypted2 匹配加密。但是下面的代码是不正确的。我认为它与字节顺序混淆,所以我没有取回原始字符串内容。谁能帮我解决这个问题或建议一个好的解决方法?
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);
}
请帮我匹配上面代码中的encrypted和encrypted2。
示例 encrypted[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
数组时,您没有使用 strings:您应该使用 memcpy
而不是 strncpy
.
关于c - 在 C 中将 char 数组转换为 ULL 时不匹配,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32548098/
所以用下面的代码,把参数x的类型从const ull改为const ull&(用typedef unsigned long long ull) 在使用 gcc 4.7.2 和标志 -O3 -std=c
这个问题在这里已经有了答案: ULL suffix on a numeric literal (3 个答案) 关闭 3 年前。 在为测试内存而编写的模式末尾添加 ULL 有什么用? 例如 uint6
我写了一段代码: int main() { long long a = 1a1b2a2b3a3b4a4b; long *p1; long *p2; long *p3;
我看到了问题mpz_t to unsigned long long conversion (gmp lib)的帖子Chris Jester-Young 给了我答案 mpz_t ull2mpz(unsi
我遇到过这样的代码: line += addr & 0x3fULL; 显然,“U”和“L”不是十六进制数字。我猜那个十六进制数字文字末尾的'ULL'表示“无符号长长” - 我正确吗? (这种东西很难用
在 C++ 中对负常量使用无符号后缀是好习惯吗? 例如,使用安全吗, foo(-1ull); 代替 foo(unsigned long long(-1)); 最佳答案 它并没有真正用于“负常数”。 C
我有以下代码: #include #include #define APPEND(x, y) x ## y #define ULL(x) APPEND(x, ull) int main (void
我有一个巨大的 2048 位字符串(例如,长度为 256 的“加密”字符串)它可以采用随机值,这意味着不需要 ASCII 值。我的目标是将其分块为无符号长整型 (ULL) 值以用于某些自定义操作(仅在
我正在使用 MSYS2(64 位)将我的 C++ 代码从 Linux 移植到 Windows。关键库是 GNU MP (gmplib)。以下代码在 MSYS2/MinGW64 环境中给出了错误的结果,
我是一名优秀的程序员,十分优秀!