You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中十六进制字符转二进制实现问题:循环异常与数组疑问

解决字符串循环终止问题与二进制结果存储方案

首先来说你遇到的循环无法终止的问题:C语言风格的字符串(也就是你用char M[64]定义的这种)是靠末尾的'\0'(空字符)来标记结束的。如果你的for循环没有检查这个结束标志,比如写成了for(i=0; ;i++)这种无终止条件的形式,程序就会一直往后访问内存,直到遇到不可控的内容,自然停不下来。

你的原始代码里用while(M[i])是对的,因为当M[i]是'\0'时,它会被判定为假,循环终止。如果要换成for循环,只需要把终止条件写清楚就行:for(int i=0; M[i] != '\0'; i++),这样就能正常遍历到字符串末尾。

接下来是用for循环把二进制输出存入新数组的需求——完全可以实现,我给你写个完整的示例代码,结合你的需求来修改:

#include<iostream>
using namespace std;

int main() {
    char M[64], binary_result[512]; // 512位足够容纳64个字符的8位二进制(64*8=512)
    int i = 0, bin_pos = 0; // bin_pos用来跟踪二进制数组的当前存储位置

    cout << "Enter M: ";
    cin >> M;
    cout << "M= " << M << endl;

    // 遍历输入字符串的每个字符,直到遇到结束符'\0'
    for(i = 0; M[i] != '\0'; i++) {
        char current_char = M[i];
        // 把当前字符转成8位二进制(ASCII范围0-127,8位足够)
        // 从最高位到最低位依次提取每一位
        for(int bit = 7; bit >= 0; bit--) {
            // 位运算提取当前位:右移bit位后和1做与运算,得到0或1,再转成字符'0'/'1'
            binary_result[bin_pos++] = ( (current_char >> bit) & 1 ) ? '1' : '0';
        }
        // 可选:如果需要在每个字符的二进制之间加空格,解开下面这行注释
        // binary_result[bin_pos++] = ' ';
    }
    // 给二进制数组加上结束符,这样可以直接用cout输出整个字符串
    binary_result[bin_pos] = '\0';

    cout << "Binary output stored in array: " << binary_result << endl;

    return 0;
}

关键细节说明:

  • 循环终止逻辑:M[i] != '\0'确保我们只处理输入的有效字符,不会越界访问数组之外的内存,从根源上避免死循环。
  • 二进制存储:用bin_pos变量来记录二进制数组的当前写入位置,每存一位就把索引加1,最后记得给数组加上'\0',这样它就变成了一个合法的C风格字符串,方便后续输出或处理。
  • 数组使用注意:你定义的M[64]没问题,但要注意输入的字符串长度不能超过63(因为要留一个位置存'\0'),如果需要支持更长的输入,可以把数组尺寸调大一些。

内容的提问来源于stack exchange,提问作者FysaL Al-otaibi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:32:36