我正在Windows上编写用户空间文件系统驱动程序,并且字节顺序转换是我一直在处理的事情,因为这个特定的文件系统总是以little-endian格式存储值,并且驱动程序应该为它们转换它们(如果需要)它是继续前进.但是,我发现自己想知道我是否需要担心字节序转换,因为据我所知,桌面Windows只支持小端架构(IA32,x86-84等),因此,盘上little-endian值非常精细,无法转换.这种观察是否准确,如果是这样,假设Windows将始终在小端硬件上运行通常是可以接受的吗?此外,甚至可能(在2011年)在大端模拟器或其他东西上运行Windows,甚至可以测试字节序问题?
编辑:为了更清楚,我的代码目前的工作方式,我在启动时进行字节顺序检查,然后每次我从磁盘加载一个值,我通过内联函数运行它,使用内在更改字节顺序,如果建筑是大端的.问题是,我不知道我是否可能错过了我需要进行转换的一个或多个地方,最简单的方法是看我搞砸了是在大端架构上运行程序.所以我有兴趣知道(a)是否甚至需要进行这些检查,因为Windows通常不会在小端平台上运行(现在无论如何),以及(b)我如何可能测试我的代码,看到我想不出在大端架构上运行Windows的方法,并且手动反转磁盘上的所有多字节值仍然涉及一个我可能搞砸的手动过程.
要使用全零来初始化int数组,我是否需要使用:
int foo[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
Run Code Online (Sandbox Code Playgroud)
或者,这将工作:
int foo[10] = {0};
Run Code Online (Sandbox Code Playgroud) 对于一些普遍的工作,我必须近似一些数字 - 比如欧拉系列.因此我必须添加非常小的数字,但我的精度有问题.如果数量非常小,则不会影响结果.
real s; //sum of all previous terms
ulong k; //factorial
s += 1.0/ k;
Run Code Online (Sandbox Code Playgroud)
在每一步之后,k变得更小,但在第10轮之后,结果不再变化并且停留在2.71828
我正在使用D编程语言中的SDL和OpenGL编写2D游戏.目前它只是尝试将纹理映射的四边形渲染到屏幕上.问题是,整个纹理映射部分似乎不太起作用.尽管纹理明显加载很好(被赋予非零纹理数,但不会导致glGetError返回零以外的值),但是使用glColor中的最后一个颜色集渲染四边形,完全忽略纹理.
我找到了纹理映射失败的常见原因,包括这个问题,无济于事.正在加载的图像文件是64x64,有效的2次幂大小.
请不要害怕因为这是D-it几乎完全是C风格的SDL和OpenGL调用.
SDL初始化代码:
if (SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1) == -1 ||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0) == -1)
throw new Exception("An OpenGL attribute could not be set!");
uint videoFlags = SDL_OPENGL | SDL_HWSURFACE | SDL_ANYFORMAT;
if (threadsPerCPU() > 1)
videoFlags |= SDL_ASYNCBLIT;
SDL_Surface* screen = SDL_SetVideoMode(800, 600, 32, videoFlags);
if (screen == null)
throw new Exception("SDL_SetVideoMode failed!");
Run Code Online (Sandbox Code Playgroud)
OpenGL初始化代码:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0., 800, 600, 0., 0., 1.);
glMatrixMode(GL_MODELVIEW);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glClearColor(0.f, 0.f, 0.f, 0.f);
Run Code Online (Sandbox Code Playgroud)
纹理加载代码:
SDL_Surface* s = IMG_Load(toStringz("hello.png")); …Run Code Online (Sandbox Code Playgroud)