【问题标题】:How to cast a LONG to a CString?如何将 LONG 转换为 CString?
【发布时间】:2011-11-23 19:09:03
【问题描述】:

我想将 long 转换为 cstring。

我已经为此苦苦挣扎了一段时间,我看到了很多解决这个问题的变体,或多或少充满了麻烦和焦虑。

我知道这个问题看起来很主观,但在我看来确实不应该。当情况涉及 MFC 和这些情况附带的标准库时,必须有一种方法被认为是最好的。

我正在寻找一种行之有效的单线解决方案。有点像 C# 中的 long.ToString()。

【问题讨论】:

  • 你到底在追求什么?将long中存储的数字转换为字符串或将long中存储的4个字符转换为各自的字符?
  • Goz 提出了一个非常好的问题......而且没有一个人会被称为“铸造”。
  • “有点像 C# 中的 long.ToString()。” 对我来说,他只是 C++ 新手,正在寻找简单的答案。
  • AJG85,你再正确不过了。我想打印 long 的值,为此我需要将其转换为字符串。
  • 从技术上讲,您也可以将 System.Convert.ToString(value) 与 C++/CLI 一起使用,但这不是 真正的 C++ 答案。

标签: c++ winapi mfc casting


【解决方案1】:

很简单:

long myLong=0;
CString s;

// Your one line solution is below
s.Format("%ld",myLong);

【讨论】:

  • 太好了,正是我想要的。谢谢。
【解决方案2】:

有很多方法可以做到这一点:

CString str("");
long l(42);

str.Format("%ld", l); // 1
char buff[3];
_ltoa_s(l, buff, 3, 10); // 2
str = buff;
str = boost::lexical_cast<std::string>(l).c_str(); // 3
std::ostringstream oss;
oss << l; // 4
str = oss.str().c_str();
// etc

【讨论】:

  • 应优先使用符合 ISO C++ 标准的 _ltoa,而不是已弃用的 ltoa 函数。此外,作为第二个参数传入的缓冲区不能为 NULL,因此如果使用 _ltoa,则需要一个临时缓冲区。
  • 对,我从不使用这些。编辑。
猜你喜欢
  • 2015-08-23
  • 1970-01-01
  • 2023-04-01
  • 2012-03-07
  • 2011-07-29
  • 2014-11-27
  • 2011-04-30
  • 2012-09-18
  • 1970-01-01
相关资源
最近更新 更多