【问题标题】:Odd data type issue奇数数据类型问题
【发布时间】:2015-03-02 00:51:23
【问题描述】:

我对 C++ 很陌生,我不明白发生了什么。我正在尝试投射 Lua double arg。数据类型为uint8_t。应用程序正在编译没有任何问题 - 但是,当我没有从变量中得到任何结果时 - 就像它是空的一样。

#include <iostream>
#include <netinet/in.h>
#include <sstream>
#include "lua.h"

using namespace std;
int _lua_function(lua_State* L) {
     int step = lua_tonumber(L, 1);
     ostringstream oss;
     oss << "Step is:" << step;
     return 0;
}

输出为:Step is: 22

当我改变

int step = lua_tonumber(L, 1);

uint8_t step = static_cast<uint8_t> (lua_tonumber(L, 1));

输出变为:Step is:

为什么我只是因为数据类型更改而没有从变量中得到任何结果?

【问题讨论】:

    标签: c++ variables lua int


    【解决方案1】:

    我会说您平台上的uint8_tunsigned char 相同。将值为22unsigned char 插入ostringstream 时,您不会在输出中看到22,而是看到22 表示的字符,这是一个不可打印的字符。

    你可以试试

    uint8_t s = 22;
    std::cout << s << std::endl;
    

    看到同样的效果。

    【讨论】:

    • 我猜你是对的:i.imgur.com/m00gC3f.png :-)。所以解决方案是使用最接近的整数 int64_t - 对吧?
    • 当您将double 转换为整数类型时,您必须非常小心整数类型可以容纳的值的范围。 int32_t 可能足够,但 int64_t 可能不够。这完全取决于您正在处理的值的范围。结帐en.cppreference.com/w/cpp/types/numeric_limits
    猜你喜欢
    • 2021-04-24
    • 2010-12-24
    • 2018-10-27
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多