我已经选择了一些我需要使用的旧代码,并且我在C
中有以下功能int pem64_decode_bytes(const char *intext,
int nchars,
unsigned char *outbytes)
{
unsigned char *outbcopy = outbytes;
while (nchars >= 4) {
char
c1 = intext[0],
c2 = intext[1],
c3 = intext[2],
c4 = intext[3];
int
b1 = pem64_dict_offset(c1),
b2 = pem64_dict_offset(c2),
b3 = pem64_dict_offset(c3),
b4 = pem64_dict_offset(c4);
if ((b1 == -1) || (b2 == -1) || (b3 == -1) || (b4 == -1))
return outbytes - outbcopy;
*(outbytes++) = (b1 << 2) | (b2 >> 4);
if (c3 != FILLERCHAR)
*(outbytes++) = ((b2 & 0xf) << 4) | (b3 >> 2);
if (c4 != FILLERCHAR)
*(outbytes++) = ((b3 & 0x3) << 6) | b4;
nchars -= 4;
intext += 4;
}
return outbytes - outbcopy;
}
它应解码已编码的数据包。有谁知道这是否是标准功能?我需要将其转换为C#,我不是C编码器有没有人知道这样做的任何样本?
修改
=======
public static List<byte> pem64_decode_bytes(string InText, int NumberOfBytes)
{
var RetData = new List<byte>();
while (NumberOfBytes >= 4)
{
char c1 = InText[0];
char c2 = InText[1];
char c3 = InText[2];
char c4 = InText[3];
int b1 = pem64_dict_offset(c1);
int b2 = pem64_dict_offset(c2);
int b3 = pem64_dict_offset(c3);
int b4 = pem64_dict_offset(c4);
if (b1 == -1 || b2 == -1 || b3 == -1 || b4 == -1)
{
return RetData;
}
(outbytes)++.Deref = b1 << 2 | b2 >> 4;
if (c3 != FILLERCHAR)
{
(outbytes)++.Deref = (b2 & 0xf) << 4 | b3 >> 2;
}
if (c4 != FILLERCHAR)
{
(outbytes)++.Deref = (b3 & 0x3) << 6 | b4;
}
NumberOfBytes -= 4;
}
return RetData;
}
答案 0 :(得分:0)
你有pem64_dict_offset的来源吗?我不认为这是一个标准函数,虽然它看起来很像Base64解码。
如果是这样,转换为C#可能不会很困难。
*(outbytes ++)可能对非C程序员可怕的事情就是在字节块中附加一个字节。
C#类比将是:
List<Byte> outbytes = new List<Byte>()
outbytes.Add(the new byte)
'return outbytes-outbcopy'将成为'return outbytes.Count'(虽然在C#中更典型的是返回列表,而不是要求调用者为你分配它。