我想知道是否有人尝试过新的.NET 4.0内存映射文件功能?我知道它们和OS一样古老,但.NET中的原生处理是新的.
有没有人能够测试这个并说一些性能?我对二进制文件的随机部分,写入速度等的访问时间非常感兴趣.与原生WinAPI MMF的性能比较也不错.
谢谢!
嗨,在我的项目中,我要读取一个.bin文件,其中包含传感器数据short(16 bit values).我正在使用fread函数进入缓冲区,但我觉得读入没有正确发生.我的意思是我写的东西和我读的东西之间没有一致性.你们能否说出这里出了什么问题?这不是我项目中的代码......我只想在这里验证fread和fwrite功能.
#include<stdio.h>
void main()
{
FILE *fp = NULL;
short x[10] = {1,2,3,4,5,6,5000,6,-10,11};
short result[10];
fp=fopen("c:\\temp.bin", "wb");
if(fp != NULL)
{
fwrite(x, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
rewind(fp);
fread(result, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
}
else
exit(0);
printf("\nResult");
printf("\n%d",result[0]);
printf("\n%d",result[1]);
printf("\n%d",result[2]);
printf("\n%d",result[3]);
printf("\n%d",result[4]);
printf("\n%d",result[5]);
printf("\n%d",result[6]);
printf("\n%d",result[7]);
printf("\n%d",result[8]);
printf("\n%d",result[9]);
fclose(fp)
}
Run Code Online (Sandbox Code Playgroud)
我做了fread()(HEX值)后:
temp.bin:
01 02 03 04 05 06 e1 8e 88 06 ef bf b6 0b...
Run Code Online (Sandbox Code Playgroud)
我做了fwrite()之后
stdout: …Run Code Online (Sandbox Code Playgroud) 我正在编辑某些二进制文件的路径,而不是重新编译它们.
我想/lib/ld-linux-armhf.so.3用一条相同长度的路径来替换我无法创建的路径,这样我就可以在不使用手机的情况下创建.它应该是相同长度的东西,因为我正在编辑二进制文件./data/data/com.clk/.so.3在下面列出的不同可能性之后,我选择了路径.我要做的是创建/data/data/com.clk/.so.3,这应该是一个符号链接/data/data/com.spartacusrex.spartacuside/gentoo_armv6l/lib/ld-linux-armhf.so.3
我最初使用过/proc/5781/cwd/rmhf.so.3,但其他应用程序(其他Linux帐户)无法读取.
然后我尝试了/data/.tmp,但它特定于我的手机,并没有根据@ChrisStratton记录.同样的/data/logcat_log.
/sdcard被排除,因为保险丝选项rw,nosuid,nodev,relatime,user_id=1015,group_id=1015,default_permissions,allow_other限制链接和可执行文件并将/lib/ld-linux-armhf.so.3被执行.
有谁知道我怎么能做到这一点?
我还没有找到这个特定问题的答案; 也许没有一个.但我一直想知道它.
当您在文本编辑器中查看二进制文件时,究竟是什么导致二进制文件显示为"乱码"?加密文件也是如此.尝试将文件的二进制值转换为ASCII吗?是否可以转换视图以显示原始二进制值,即显示组成文件的1和0?
最后,有没有办法确定哪个程序将正确打开数据文件?很多时候,特别是对于Windows,文件是孤立的,或者与特定程序无关.在文本编辑器中打开它有时会告诉你它属于哪里,但由于胡言乱语,大部分时间都没有.如果扩展程序未提供任何信息,您如何确定它所属的程序?
我有一个二进制数据文件,我需要在某个位置替换几个字节.我想出以下内容将bash指向偏移并告诉我它找到了我想要的地方:
dd bs=1 if=file iseek=24 conv=block cbs=2 | hexdump
Run Code Online (Sandbox Code Playgroud)
现在,使用"file"作为输出:
echo anInteger | dd bs=1 of=hextest.txt oseek=24 conv=block cbs=2
Run Code Online (Sandbox Code Playgroud)
这似乎工作得很好,我可以查看十六进制编辑器中所做的更改.问题是,"anInteger"将被写为该整数的ASCII表示(这是有意义的)但我需要编写二进制表示.
我想为此使用bash,脚本应该在尽可能多的系统上运行(我不知道目标系统是否会安装python或其他任何东西).
如何告诉命令将输入转换为二进制(可能是十六进制)?
我需要将非常大(超过512Mb)的二进制文件存储到NoSQL数据库中.具体的NoSQL数据库实现允许什么?
将二进制文件中的字节序列替换为相同长度的其他字节的最佳方法是什么?二进制文件非常大,大约50 MB,不应该一次加载到内存中.
更新:我不知道需要替换的字节位置,我需要先找到它们.
我有一组打包到文件中的二进制记录,我正在使用Data.ByteString.Lazy和Data.Binary.Get读取它们.使用我当前的实现,8Mb文件需要6秒才能解析.
import qualified Data.ByteString.Lazy as BL
import Data.Binary.Get
data Trade = Trade { timestamp :: Int, price :: Int , qty :: Int } deriving (Show)
getTrades = do
empty <- isEmpty
if empty
then return []
else do
timestamp <- getWord32le
price <- getWord32le
qty <- getWord16le
rest <- getTrades
let trade = Trade (fromIntegral timestamp) (fromIntegral price) (fromIntegral qty)
return (trade : rest)
main :: IO()
main = do
input <- BL.readFile "trades.bin"
let trades = runGet getTrades …Run Code Online (Sandbox Code Playgroud) 我有一个用Java创建的字节数组.它代表某些文件的内容.我不确切知道这个数组的最大大小.它可以是不同的尺寸.我想将它存储在mysql中.我应该在mysql中使用什么类型的?
我一直在疯狂地尝试读取使用Java程序编写的二进制文件(我将Java库移植到C#并希望保持与Java版本的兼容性).
该组件的作者选择使用float乘法和乘法来确定一段数据的开始/结束偏移.不幸的是,它在.NET中的工作方式与Java相比有所不同.在Java中,库使用Float.intBitsToFloat(someInt)其中的价值someInt是1080001175.
int someInt = 1080001175;
float result = Float.intBitsToFloat(someInt);
// result (as viewed in Eclipse): 3.4923456
Run Code Online (Sandbox Code Playgroud)
之后,此数字乘以一个值以确定开始和结束位置.在这种情况下,索引值为时会出现问题2025.
int idx = 2025;
long result2 = (long)(idx * result);
// result2: 7072
Run Code Online (Sandbox Code Playgroud)
根据我的计算器,这个计算的结果应该是7071.99984.但是在Java中它恰好 7072在它被投入很长时间之前,在这种情况下它仍然存在7072.为了使因子准确 7072,浮动的值必须是3.492345679012346.
3.492345679012346代替3.4923456(Eclipse中显示的值)是否安全?现在,我正在寻找一种在.NET中获得完全相同结果的方法.但到目前为止,我只能使用hack读取这个文件,而且我并不完全确定hack适用于Java中的库生成的任何文件.
根据Java VS C#中的intBitsToFloat方法?,等效功能使用:
int someInt = 1080001175;
int result = BitConverter.ToSingle(BitConverter.GetBytes(someInt), 0);
// result: …Run Code Online (Sandbox Code Playgroud)