【问题标题】:C# to C++ function equivelent - .tostring("X4")C# 到 C++ 函数等效 - .tostring("X4")
【发布时间】:2021-07-19 17:38:46
【问题描述】:

C# 函数 .tostring("X4") 是否有与 C++ 等效的功能?

这几天我一直在摸不着头脑,想知道为什么我的传感器报告的序列号与制造商软件(用 C# 编写)和我的 C++ 代码报告的序列号不同。序列号也写在传感器上,这与制造商 C# 代码报告的内容相关。在检查他们的源代码时,他们使用 .tostring("X4") 函数将其转换为“人类可读”,这是有道理的(来自“哦,这就是它不同的原因”,而不是“为什么地球上会你这样做”的观点)。

更多信息 - https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings

一个类似的问题,但 C# 到 Java - C# .ToString("X4") equivalent in Java

【问题讨论】:

  • 使用 sscanf 或 sprintf。
  • (对于上下文,X4 将数字格式化为大写十六进制数字,必要时用前导 0 填充到总共 4 个字符)
  • 如果你负担得起使用 3rd 方库,你可以试试fmt

标签: c# c++ string


【解决方案1】:
 #include <iostream>
    #include<sstream>
    #include <iomanip>
    
    int main() {
        int x = 12;
        std::stringstream stream;
        stream << std::setfill('0') << std::setw(4)<< std::hex << x;
        std::cout << stream.str();
    }

输出:000c

我想这就是您要寻找的答案。

【讨论】:

  • 使用 setfill 和 setw 比我在回答中所做的更好。 +1(虽然sizeof(x) 的宽度有点问题 - sizeof(x) 可能是 2 甚至 8)
  • @TedLyngmo 非常感谢。你说的可能会有所不同:)
【解决方案2】:

C++ 中没有现成的等效函数,但您可以创建一个以类似方式工作的函数:

#include <iostream>
#include <sstream>
#include <string>

template<class T>
std::string tostringX(unsigned len, T v) {
    std::ostringstream os;
    os << std::hex << v;
    auto rv = os.str();
    if(rv.size() < len) rv = std::string(len - rv.size(), '0') + rv;
    return rv;
}

int main() {
    std::cout << tostringX(4, 0xFEDC) << '\n'; // outputs "fedc"
}

【讨论】:

  • 非常感谢您!传感器现在报告正确的序列号。
猜你喜欢
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 2011-08-14
相关资源
最近更新 更多