【问题标题】:How to convert UCHAR to Binary如何将 UCHAR 转换为二进制
【发布时间】:2023-04-11 12:02:01
【问题描述】:

我想知道如何在 C++/MFC 中将 UCHAR 数组转换为二进制字符串。

我尝试了 Cstring 的一些可能性,但没有奏效。请告诉我原因。

这是我尝试过的代码:

UCHAR ucdata[256];
ucdata[0] = 40;
char data[100];
StrCpy(data,(char *)ucData);
CString dataStr(data);


// original value


// convert to int
int nValue = atoi( dataStr );

        // convert to binary
        CString strBinary;
        itoa( nValue, strBinary.GetBuffer( 50 ), 2 );
        strBinary.ReleaseBuffer();

【问题讨论】:

  • 你为什么不更详细地展示你正在尝试做的事情(为什么),并展示你已经尝试过的东西?
  • 向我们展示您的代码,并告诉我们您的期望。
  • 这很可能是一个副本:stackoverflow.com/questions/708114/…
  • 嗨,我已经用我的代码更新了任务,请帮忙
  • 您想要 UCHAR 数组的文本二进制打印输出吗?在这种情况下,您能否被说服接受十六进制打印输出?它的大小只有 25%。

标签: c++ mfc cstring


【解决方案1】:

C++ ... MFC CString 肯定不是...

在标准 C++ 中,您可以这样做:

UCHAR ucdata[256];
ostringstream oss(ostringstream::out);
ostream_iterator<UCHAR> out(oss);

oss << setbase(2) << setw(8) << setfill('0');
copy(ucdata, ucdata + sizeof(ucdata), out);

cout << oss.str() << endl;

我不确定如何将其转换为 MFC,尽管如果在 std::string 类和 MFC CString 之间存在转换器,那么您可以尝试使用那些?

【讨论】:

    【解决方案2】:

    您可以尝试这样的事情(但请注意,itoa 不是严格可移植的):

    UCHAR ucdata[256]; // filled somehow
    
    CString result;    // starts out empty
    char buf[9];       // for each number
    
    for (size_t i = 0; i < 256; ++i)
      result += itoa(ucdata[i], buf, 2);
    

    我不知道CString,但如果它类似于std::string,那么您可以简单地使用+ 运算符附加以null 结尾的C 字符串。

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 2020-01-21
      • 1970-01-01
      相关资源
      最近更新 更多