- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力获取 someone else's code启动并运行。代码是用 C++ 编写的。失败的部分是将 std::string 转换为 base64:
std::string tmp = "\0";
tmp.append(strUserName);
tmp.append("\0");
tmp.append(strPassword);
tmp = base64_encode(tmp.c_str(), tmp.length());
其中 base64 是:
std::string base64_encode(char const* bytes_to_encode, unsigned int in_len) {
std::string ret;
int i = 0;
int j = 0;
unsigned char char_array_3[3];
unsigned char char_array_4[4];
while (in_len--) {
char_array_3[i++] = *(bytes_to_encode++);
if (i == 3) {
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
char_array_4[3] = char_array_3[2] & 0x3f;
for(i = 0; (i <4) ; i++)
ret += base64_chars[char_array_4[i]];
i = 0;
}
}
if (i)
{
for(j = i; j < 3; j++)
char_array_3[j] = '\0';
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
char_array_4[3] = char_array_3[2] & 0x3f;
for (j = 0; (j < i + 1); j++)
ret += base64_chars[char_array_4[j]];
while((i++ < 3))
ret += '=';
}
return ret;
}
它使用“tmp”字符串来调用服务器,并且必须在 base64 字符串中嵌入两个 NUL 字符(在 strUserName 之前和 strPassword 之前)。然而,似乎由于代码将 tmp 作为 c_str() 传递,NUL 字符被剥离。对此有好的解决方案吗?谢谢。
更新 我想我应该补充一点,代码包括“#include <asm/errno.h>
”,我用谷歌搜索并没有找到与 macOS 的兼容性,所以我只是把它注释掉了。不确定那是不是使事情不起作用,但我对此表示怀疑。全面披露。
最佳答案
std::string tmp = "\0";
和 tmp.append("\0");
不要添加任何 '\0 '
个字符到 tmp
。采用 const char*
的 std::string::string
和 std::string::append
版本采用 NUL 终止C 风格的字符串,所以他们一看到 NUL 字符就停止。
要实际将 NUL 字符添加到您的字符串中,您需要使用构造函数和 append
方法,它们需要一个长度以及一个 const char*
,或者需要计数和 char
的版本:
std::string tmp("\0", 1);
tmp.append(strUserName);
tmp.append("\0", 1);
tmp.append(strPassword);
tmp = base64_encode(tmp.c_str(), tmp.length());
关于C++:如何在不丢失 NUL 字符的情况下将 std::string 编码为 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37893573/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
我有一个 const char* 指向十六进制格式的数据,我需要找到我正在检查的数据的长度 NUL-terminator 但是当\x00 出现时它检测到它作为 NUL 终止符返回不正确的长度。 我该如
如果 nul 永远不能成为 Windows 中的一个文件,那么如果使用对 nul 没有相同规则的操作系统在所有目录中创建一个名为“nul”的文件会怎么样。例如,如果在 CMD 中执行“echo 123
我知道 strlen() 不计算 NUL 终止字符。我真的知道这是事实。因此,这个问题并不是要问为什么 strlen() 可能“大概”不返回正确的字符串长度,这个问题已经在 StackOverfl
虽然 CStr 通常用于 FFI,但我正在读取 &[u8],它以 NUL 结尾并确保是有效的 UTF-8,所以没有需要检查。 但是 NUL 终止符不一定在切片的末尾。将此作为 &str 获取的好方法是
虽然 CStr 通常用于 FFI,但我正在读取 &[u8],它以 NUL 结尾并确保是有效的 UTF-8,所以没有需要检查。 但是 NUL 终止符不一定在切片的末尾。将此作为 &str 获取的好方法是
我正在使用 Java BufferedWriter 逐行写入文件。问题是,当我写完文件时,它在整个文件中显示“nul”。 我不认为问题出在我正在写的内容上,因为我用System.out.print仔细
我正在使用 R 使用 fread 读取一个文件,该文件包含许多列和行。该文件如下所示: 1_17118 1_18353 1_21882 1_21955 1_22054 Ind0001 -1
c89 海合会 (海湾合作委员会) 4.6.3 你好, 我在 *search = '\0' 上得到一个堆栈转储;我认为可以用 nul 终止一个字符串。 char *ptr_name = "hello@
这个问题在这里已经有了答案: NUL undeclared- first use in this function (4 个答案) 关闭 8 年前。 char word[5]={"fayed"};
我曾经使用以下函数写入很多不同的文件 using (FileStream fs = new FileStream(Settings.PsLog, FileMode.Truncate, System.S
我正在编写一个下载器,它将 url 拆分为多个部分并使用线程下载,可能我不会使用“join”,因为 join = 无法流式传输(如果所有线程未完成,则无法写入文件) 但是问题是 f.seek 和 wr
这是我服务器端的方法: void send_err(int socket_fd, char *msg) { /// To send an error message (`ERR`).
我需要创建一个将标准错误流重定向到某个文件的新进程。创建子进程的代码没有可用的控制台,因此在某些情况下 GetStdHandle(any) 将返回 0。子进程将出于某种原因尝试复制其所有标准 IO 句
我的 Notepad++ 中有这样的字符 当我尝试复制整行时,我实际上正在复制所有内容,直到“NUL”: File:1 我想做的就是替换那些空的,什么都没有,这样我就可以复制我的整行。也许有任何关键字
我正在通过 Java 中的 UDP 接收带有字节数组的数据包。我知道最大可能的字节大小,但我不知道当前接收的大小。 如果我从这个字节数组创建一个 String 实例,那么该字符串在有用的有效负载之后将
来自 the web我知道 C 包含 NUL 关键字。 编译时出现错误 NUL undeclared first use in this function' 我的代码片段: for (;;) {
#include #include int main() { char x[] = "Happy birthday to You"; char y[25]; char z[
我看到了here如果它不是 NULL 终止的,则不可能使用 strlen 找出 (unsigned char *) 字符串长度,因为 strlen 函数将遍历字符串但不会找到任何 '\0',因此运行-
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我是一名优秀的程序员,十分优秀!