gpt4 book ai didi

c# - C 到 C# 字节数组 + 十六进制

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

我目前正在尝试将此 C 代码转换为 C#。
由于我对 C 不是很熟悉,所以非常感谢您的帮助!

static unsigned char byte_table[2080] = {0};

首先,一些 bytearray 被声明但从未填充,我可以接受

BYTE* packet = //bytes come in here from a file
int unknownVal = 0;
int unknown_field0 = *(DWORD *)(packet + 0x08);
do
{
*((BYTE *)packet + i) ^= byte_table[(i + unknownVal) & 0x7FF];
++i;
}
while (i <= packet[0]);

但在这里..我真的不知道如何将其翻译成 C#
BYTE = byte[] 对吗?
DWORD = 双?
但是 (packet + 0x08) 怎么翻译呢?如何将十六进制添加到字节数组?哦

我会很高兴有任何帮助! :)

最佳答案

在 C 中,如果我没记错的话,将任何一组内存设置为 {0} 会将整个内存区域设置为零。

底部循环可以用更简单、C# 友好的方式重写。

byte[] packet = arrayofcharsfromfile;
int field = packet[8]+(packet[9]<<8)+(packet[10]<<16)+(packet[11]<<24); //Assuming 32 bit little endian integer
int unknownval = 0;
int i = 0;

do //Why waste the newline? I don't know. Conventions are silly!
{
packet[i] ^= byte_table[(i+unknownval) & 0x7FF];
} while( ++i <= packet[0] );

field 是通过获取包括索引 8 和索引 8 之后的四个字节并从中生成一个 32 位 int 来设置的。

在 C 中,您可以将指针转换为其他类型,就像您提供的代码段中所做的那样。他们正在做的是获取一个字节数组(每个字节的大小为 DWORD 的 1/4)并将 8 添加到索引中,使指针前进 8 个字节(因为每个元素都是一个字节宽),然后处理该指针作为 DWORD 指针。简单来说,他们将字节数组转换为 DWORD 数组,然后取索引 2,即 8/4=2

您可以通过将字节串在一起并进行位移和加法,以安全的方式模拟此行为,正如我在上面演示的那样。它没有那么高效,也没有那么漂亮,但它完成了同样的事情,而且也是以一种与平台无关的方式。并非所有平台都是小端。

关于c# - C 到 C# 字节数组 + 十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14693143/

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