【发布时间】:2018-09-28 15:27:24
【问题描述】:
我正在寻找基于我拥有的 C++ sn-p 编写一个等效的 R 函数。见下文:
基本上,我想解码:
I@`@@B@@@@@@@@@@@@@@@@@@@IGZJPCoA@@@@B@@|y}wqCLnLp@@@@@@z@SvA@ @@q^I|VeUt@@@
通过在构建消息时向每个字符添加 0x40,一次将六位转换为可打印字符。下面的代码描述了将可打印值转换回二进制的过程。一旦字符串从可打印转换回二进制,就必须使用反向字节序转换重新排序。
收件人:
0010 0100 0000 1000 0000 0000 0000 0000 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1001 0001 1101 1010 0010 1001 0000 0000 1110 1111 0000 0100 0000 0000 0000 0000 0000 0000 0010 0000 0000 0000 1111 0011 1001 1111 0111 0111 1100 0100 0011 0011 0010 1110 0011 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1110 1000 0000 0100 1111 0110 0000 0100 0000 0000 0000 0000 1100 0101 1110 0010 0111 1100 0101 1010 0101 0101 0111 0100 0000 0000
使用 R 等效项:
/*****************************************************************************/
void Binary_Decode_6bit(char *in_string,unsigned char *out_string)
{
int i,j;
/* DECODE string from 6 bit binary to 8 bit binary */
/* Convert each 4 word group into 3 words */
for (i=0, j = 0; i < strlen(in_string); i += 4)
{
out_string[j++] = ((in_string[i] &0x3f) << 2) | ((in_string[i+1] &0x30) >> 4);
out_string[j++] = ((in_string[i+1] &0x0f) << 4) | ((in_string[i+2] &0x3c) >> 2);
out_string[j++] = ((in_string[i+2] &0x03) << 6) | (in_string[i+3] &0x3f);
}
}
/****************************************************************************
我希望使用 R(甚至 RCpp)函数来应用到相当大的这些消息列表。
感谢任何帮助!
【问题讨论】:
-
那么你的问题是什么?到目前为止,您尝试过什么?
-
我需要通过制定的流程将字符串转换为二进制并将其转换为十进制值。我只对编码/解码数据有过了解。我真的在寻找如何解决这个问题的方向。