Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C++;_C++_Binary_Char - Fatal编程技术网

C++ 使用C++;

C++ 使用C++;,c++,binary,char,C++,Binary,Char,将字符转换为无符号二进制表示(MSB为0的字节)的最有效但最简单的方法是什么?我有一个这样设置的方法: string AsciiToBinary(char value) { string binary = ""; int code = value; while (code > 0) { if ((code % 2) == 1) { binary.append("

将字符转换为无符号二进制表示(MSB为0的字节)的最有效但最简单的方法是什么?我有一个这样设置的方法:

string AsciiToBinary(char value) {
        string binary = "";
        int code = value;

        while (code > 0) {
                if ((code % 2) == 1) {
                        binary.append("1", 1);
                } else {
                        binary.append("0", 1);
                }
                code = code / 2;
        }
        return binary;
}
我假设将int设置为char会将char的ASCII值设置为int。但是,我的结果与ASCII表不匹配。我将按如下方式执行此功能:

char head = stack.pop();
int code = head; // do not need to parse
string binary;

while (!stack.isEmpty()) {
        binary = AsciiToBinary(code);
        outfile << binary << endl;
        binary.clear();
        head = stack.pop();
        code = head;
} 
charhead=stack.pop();
int代码=头;//不需要解析
字符串二进制;
而(!stack.isEmpty()){
二进制=二进制(代码);

outfile
std::string::append()
将字符添加到字符串的末尾。因此,您将按相反顺序放置位:LSB是第一个字符,反之亦然。请尝试以下操作:
binary.insert(0,1,(代码%2==1);
std::string::append()
将字符添加到字符串的末尾。因此,您将按相反的顺序放置位:LSB是第一个字符,反之亦然。请尝试以下操作:
binary.insert(0,1,(代码%2==1)?“1”:“0”);

对于所有感兴趣和学习C++的人来说,此方法工作良好,可编辑:

using namespace std; // bad for updates
#include <string>

string AsciiToBinary(char value) {
        string binary = "";
        unsigned int code = value;
        unsigned int chk = value;

        while (code > 0) {
                if ((code & 1) == 1) {
                        binary.append("1", 1);
                } else {
                        binary.append("0", 1);
                }
                code = code / 2;
        }
        reverse(binary.begin(), binary.end());

        if (chk < 64) {
                binary.insert(0, "00");
        } else {
                binary.insert(0, "0");
        }

        return binary;
}
使用命名空间std;//不适合更新
#包括
字符串二进制(字符值){
字符串binary=“”;
无符号整数代码=值;
无符号整数chk=值;
而(代码>0){
如果((代码&1)==1){
二进制。追加(“1”,1);
}否则{
追加(“0”,1);
}
代码=代码/2;
}
反向(binary.begin(),binary.end());
如果(chk<64){
二进制。插入(0,“00”);
}否则{
二进制。插入(0,“0”);
}
返回二进制;
}

此方法运行良好,对于所有感兴趣和学习C++的人来说都是可编辑的:

using namespace std; // bad for updates
#include <string>

string AsciiToBinary(char value) {
        string binary = "";
        unsigned int code = value;
        unsigned int chk = value;

        while (code > 0) {
                if ((code & 1) == 1) {
                        binary.append("1", 1);
                } else {
                        binary.append("0", 1);
                }
                code = code / 2;
        }
        reverse(binary.begin(), binary.end());

        if (chk < 64) {
                binary.insert(0, "00");
        } else {
                binary.insert(0, "0");
        }

        return binary;
}
使用命名空间std;//不适合更新
#包括
字符串二进制(字符值){
字符串binary=“”;
无符号整数代码=值;
无符号整数chk=值;
而(代码>0){
如果((代码&1)==1){
二进制。追加(“1”,1);
}否则{
追加(“0”,1);
}
代码=代码/2;
}
反向(binary.begin(),binary.end());
如果(chk<64){
二进制。插入(0,“00”);
}否则{
二进制。插入(0,“0”);
}
返回二进制;
}

否-您已将所有
字符串存储在堆栈上这是什么“二进制C++”你在标题中提到了?仅供参考:标签不属于标题!也就是说,请阅读所有指南,你应该提供一个最小但完整的示例和一些其他信息。目前,你的问题是离题的,有很好的理由。这是填充的堆栈:[d g q q a p l j]我正在尝试将每个字符转换为无符号字节。对于“d”,我的程序输出的是“1010”,这是不正确的。可能是“否”的重复-您已将所有
字符串
存储在堆栈上这是什么“二进制C++”你在标题中提到了?仅供参考:标签不属于标题!也就是说,请阅读所有指南,你应该提供一个最小但完整的示例和一些其他信息。目前,你的问题是离题的,有很好的理由。这是填充的堆栈:[d g q q a p l j]我正在尝试将每个字符转换为一个无符号字节。对于“d”,我的程序输出的是“1010”,这是不正确的。可能是非常聪明的重复,非常感谢willywonka_dailyblah!@bama_程序员np bro。还有一个提示:不要使用
code%2
而是使用
code&1
保存一个除法:)我终于输出了就像我想的那样,我会对字节进行哈希处理,但它们不是ASCII表中正确的无符号字节。我可能会用每个字符对应的无符号字节进行哈希处理,因为我只是在胡闹。我只是有点生气,我不能直接这样做。@bama_程序员,我想我可能知道原因:将
字符
转换为n
unsigned char
首先,然后将其转换为
int
@bama_程序员ho ho Hoverey聪明,非常感谢willywonka_dailyblah!@bama_程序员np bro。还有一个提示:不要使用
code%2
而是使用
code&1
来保存一个除法:)我终于输出了我想要的字节,但它们不是正确的unsigne字符ASCII表中显示的d字节。我可能会将每个字符与其对应的无符号字节进行散列,因为我只是在胡闹。我只是有点生气,我不能直接这样做。@bama_程序员我想我可能知道原因:首先将
字符
转换为
无符号字符
,然后转换为
int
@bama_程序员呵呵