gpt4 book ai didi

c - 长十六进制 Linux 上的按位运算 C

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:02 26 4
gpt4 key购买 nike

简要说明:问题与十六进制的按位运算有关 - C 语言;操作系统:linux

我只想对“长”十六进制字符串进行一些按位运算。我尝试了以下方法:

第一次尝试:

由于溢出,我无法使用以下内容:

long  t1 = 0xabefffcccaadddddffff;
and t2 = 0xdeeefffffccccaaadacd;

第二次尝试:不起作用,因为 abcdef 被解释为字符串而不是十六进制

char* t1 = "abefffcccaadddddffff";
char* t2 = "deeefffffccccaaadacd";

int len = strlen(t1);

for (int i = 0; i < len; i++ )
{
char exor = *(t1 + i) ^ *(t2 + i);
printf("%x", exor);
}

有人可以告诉我该怎么做吗?谢谢

最佳答案

按位运算通常很容易扩展到更大的数字。

执行此操作的最佳方法是将它们拆分为 4 或 8 字节序列,并将它们存储为 uint 数组。在这种情况下,这些特定字符串至少需要 80 位。

对于 AND 来说很简单,比如:

unsigned int A[3] = { 0xabef, 0xffcccaad, 0xddddffff };
unsigned int B[3] = { 0xdeee, 0xfffffccc, 0xcaaadacd };
unsigned int R[3] = { 0 };

for (int b = 0; b < 3; b++) {
R[b] = A[b] & B[b];
}

一个更完整的示例,包括扫描十六进制字符串并打印它们:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef unsigned int uint;

void long_Print(int size, const uint a[]) {
printf("0x");
for (int i = 0; i < size; i++) {
printf("%x", a[i]);
}
}

void long_AND(int size, const uint a[], const uint b[], uint r[]) {
for (int i = 0; i < size; i++) {
r[i] = a[i] & b[i];
}
}

// Reads a long hex string and fills an array. Returns the number of elements filled.
int long_Scan(int size, const char* str, uint r[]) {
int len = strlen(str);
int ri = size;

for (const char* here = &str[len]; here != str; here -= 8) {
if (here < str) {
char* tmp = (char*)malloc(4);

tmp[0] = '%';
tmp[1] = (char)(str - here + '0');
tmp[2] = 'x';
tmp[3] = '\0';

sscanf(str, tmp, &r[ri--]);

free(tmp);

break;
}
else {
sscanf(here, "%8x", &r[ri--]);
}
}

for (; ri >= 0; ri--) {
r[ri] == 0;
}

return size - ri;
}

int main(int argc, char* argv[])
{
uint A[3] = { 0 };
uint B[3] = { 0 };
uint R[3] = { 0 };

long_Scan(3, "abefffcccaadddddffff", A);
long_Scan(3, "deeefffffccccaaadacd", B);

long_Print(3, A);
puts("\nAND");
long_Print(3, B);
puts("\n=");

long_AND(3, A, B, R);
long_Print(3, R);

getchar();

return 0;
}

关于c - 长十六进制 Linux 上的按位运算 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com