我在全局范围内有一个myObjects的向量.我有一个方法,它使用a std::vector<myObject>::const_iterator
遍历向量,并进行一些比较以找到一个特定的元素.一旦找到了必需的元素,我希望能够返回指向它的指针(向量存在于全局范围内).
如果我返回&iterator
,我是否返回迭代器的地址或迭代器指向的地址?
我需要将const_iterator
背面强制转换为myObject,然后返回该地址吗?
如果我有一个C++结构,定义一个64位数据字,如..
struct SMyDataWord
{
int Name : 40;
int Colour : 24;
};
Run Code Online (Sandbox Code Playgroud)
: 40
语法意味着什么......是否意味着前40位是为Name保留的,剩下的24位是为Color设置的?
这就是它似乎被使用的方式,但我以前没遇到它.
我使用硬件接口发送数据,要求我设置DMA缓冲区,需要在64位边界上对齐.
DMA引擎期望缓冲区在至少32位边界(4字节)上对齐.为获得最佳性能,缓冲区应在64位边界(8字节)上对齐.传输大小必须是4个字节的倍数.
我posix_memalign
用来创建这样的缓冲区......
posix_memalign ((void**)&pPattern, 0x1000, DmaBufferSizeinInt32s * sizeof(int) ) )
Run Code Online (Sandbox Code Playgroud)
pPattern
是一个指向int的指针,并且是我的缓冲区的开始DmaBufferSizeinInt32s
.
我的缓冲区是否在64位上对齐?
将数据存储到网络上的文件的最佳方法是什么,稍后将以编程方式再次读入该文件.该程序的目标平台是Linux(Fedora),但它需要将文件写入Windows(XP)机器
这需要在C++中,会有大量的写/读事件,因此需要高效,并且需要以可以轻松读回的方式写出数据.
可能没有读回整个文件,我需要在文件中搜索特定的数据块并将其读回.
请问简单的二进制流编写器吗?我应该如何存储数据 - XML?
还有什么我需要担心的吗?
更新:澄清一下,这里是peterchen的观点的一些答案
请澄清:
*你只是附加块,还是你还需要删除/更新它们?
我只需要附加到文件的末尾,但需要搜索它并从中检索任何点
Run Code Online (Sandbox Code Playgroud)*** are all blocks of the same size?**
不,数据的大小会有所不同 - 有些将是自由文本注释(如此处的帖子)其他将是特定的对象类数据(参数集)
Run Code Online (Sandbox Code Playgroud)*** is it necessary to be a single file?**
不,但可取
Run Code Online (Sandbox Code Playgroud)*** by which criteria do you need to locate blocks?**
按数据类型和时间戳.例如,如果我定期写出一组特定的参数,那么在其他数据中,比如自由文本,我想在一个日期/时间找到这些参数的值 - 所以我需要搜索时间我写出那些最接近那个日期的参数并将它们读回来.
Run Code Online (Sandbox Code Playgroud)*** must the data be readable for other applications?**
没有.
Run Code Online (Sandbox Code Playgroud)*** do you need concurrent access?**
是的,我可能会继续写作.但是应该一次只写一次.
Run Code Online (Sandbox Code Playgroud)*** Amount of data (per block / total) - kilo, mega, giga, tera?**
每次写入的数据量都很低......从一些字节到一百个字节 - …
我需要编写一个快速而脏的应用程序,通过以太网连接将一些数据写入远程计算机.远程机器正在等待数据,我只是想在它上面放一些数据来测试连接和带宽等.
我希望能够在连接上发送已知的数据模式(简单计数或重复模式),并能够将带宽增加x2,x10,x100等.
不需要握手,CRC,特定数据格式,框架等只是普通的旧数据.
请...没有第三方库,只有C++(或C或python)
我在全局范围内有一个myObjects的向量.
std::vector<myObject>
Run Code Online (Sandbox Code Playgroud)
方法传递指向向量中的一个元素的指针.这个方法可以递增指针,到达下一个元素,
myObject* pmObj;
++pmObj; // the next element ??
Run Code Online (Sandbox Code Playgroud)
或者它应该通过std::Vector<myObject>::iterator
和增加而不是?
现在假设在此期间矢量不会改变.
给出2 32位整数iMSB和iLSB
int iMSB = 12345678; // Most Significant Bits of file size in Bytes
int iLSB = 87654321; // Least Significant Bits of file size in Bytes
Run Code Online (Sandbox Code Playgroud)
漫长的形式将是......
// Always positive so use 31 bts
long long full_size = ((long long)iMSB << 31);
full_size += (long long)(iLSB);
Run Code Online (Sandbox Code Playgroud)
现在..
我不需要那么多的精度(确切的字节数),所以,我怎样才能将文件大小转换为MiBytes到3个小数位并转换为字符串...
试过这个......
long double file_size_megs = file_size_bytes / (1024 * 1024);
char strNumber[20];
sprintf(strNumber, "%ld", file_size_megs);
Run Code Online (Sandbox Code Playgroud)
......但似乎没有用.
即1234567899878Bytes = 1177375.698MiB ??