有没有办法从数据库中的 BLOB 类型字段中仅读取几个字节(对于这个问题,数据库品牌无关紧要)并确定二进制内容是否是图像(假设它是以下之一:JPG、 GIF、PNG)?我有一个将文件存储在数据库中的网络应用程序,如果它是图像,我想显示缩略图,否则我想显示图标...但我没有在其他任何地方存储该 blob 的任何 MIMETYPE 信息(这不是我的设计)......并且因为它是一个网络应用程序,所以图像的加载需要在写出 <img> 标签的单独调用(getImage.ashx)中进行......并且当我写出时标签我不想将整个 blob 读入库,确定它是否是图像,调整它的大小...等等...我希望能够查看前几个字节并知道我是否需要写标签。我不太了解图像文件结构/格式,无法知道前几个字节中是否有某种标准标头,我可以通过读入来判断它是 JPG、GIF 还是 PNG。
合理?
如果您想具体帮助我(而不是笼统地回答是否可以完成),那么我正在使用 .NET C# 和 SQL 2005
谢谢!
任何人都可以展示如何在 C 中正确地将二进制表示的数据转换为双精度值。例如,我有 8 个无符号字符值要转换为双精度值(让我们将其命名为缓冲区)。所以buffer[0]的0位是LSB,buffer[7]的7位是MSB。预先非常感谢!
而不是使用StreamReader/Filestream我想从文件中读取二进制数据并在文本框中显示数据(格式化).
gcc 4.6.0
二进制数据是什么样的?是1还是0.
我只是想知道,因为我正在和另一位程序员谈论复制字符串和二进制数据.
通常,我使用strcpy/strncpy函数来复制字符串,使用memcpy/memmove来复制二进制数据.但是,我只是想知道它是什么样的?
非常感谢任何建议,
我正在使用类似于下面的代码开始一个过程:
// some of the flags are not needed
process.StartInfo.CreateNoWindow = true;
process.StartInfo.ErrorDialog = false;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
process.EnableRaisingEvents = true;
process.OutputDataReceived += process_OutputDataReceived;
process.ErrorDataReceived += process_OutputDataReceived;
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
}
void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是该DataReceivedEventArgs对象有Data一个字符串属性。我需要将标准输出数据读取为二进制数据。我猜想没有办法将字符串数据恢复为适当的二进制数据,因此任何有关使用不同方法接收二进制数据的建议都会很棒。
我在读取二进制文件并将其字节转换为十六进制表示时遇到一些问题.
到目前为止我尝试过的:
ifstream::pos_type size;
char * memblock;
ifstream file (toread, ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
cout << "the complete file content is in memory" << endl;
std::string tohexed = ToHex(memblock, true);
std::cout << tohexed << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
转换为十六进制:
string ToHex(const string& s, bool upper_case)
{
ostringstream ret;
for (string::size_type i = 0; i < s.length(); ++i)
ret << std::hex << std::setfill('0') << std::setw(2) << (upper_case ? …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用读取文件BinaryReader.但是,我在检索预期的值时遇到问题.
using (BinaryReader b = new BinaryReader(File.Open("file.dat", FileMode.Open)))
{
int result = b.ReadInt32(); //expected to be 2051
}
Run Code Online (Sandbox Code Playgroud)
"file.dat" 是以下......
00 00 08 03 00 00 EA 60
Run Code Online (Sandbox Code Playgroud)
预期的结果应该是2051,但它得到的东西完全无关紧要.请注意,我每次得到的结果都是一样的.
问题是什么?
我有一些包含内容的数据文件
a1 b1 c1 d1
a1 b2 c2 d2
...
[blank line]
a2 b1 c1 d1
a2 b2 c2 d2
...
Run Code Online (Sandbox Code Playgroud)
我用 gnuplot 绘制这个
splot 'file' u 1:2:3:4 w pm3d.
Run Code Online (Sandbox Code Playgroud)
现在,我想使用二进制文件。我使用未格式化的流访问(直接或顺序访问不能直接工作)使用 Fortran 创建了该文件。通过使用 gnuplot
splot 'file' binary format='%float%float%float%float' u 1:2:3
Run Code Online (Sandbox Code Playgroud)
我得到一个正常的 3D 绘图。但是, pm3d-command 不起作用,因为我在二进制文件中没有空行。我收到错误消息:
>splot 'file' binary format='%float%float%float%float' u 1:2:3:4 w pm3d
Warning: Single isoline (scan) is not enough for a pm3d plot.
Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
Run Code Online (Sandbox Code Playgroud)
我想问一下是否有人可以向我解释使用十六进制格式(例如由摩托罗拉 S-Record 或英特尔十六进制)比使用直接二进制映像(如固件或内存转储)的好处?
我知道有一些关于二进制文件的元信息很有用,比如使用的内存区域,数据完整性的校验和等等……但是,实际数据大小加倍的事实,因为一切都将以十六进制 ASCII 格式保存代表让我感到困惑。
使用十六进制 ASCII 表示的原因仅仅是可移植性,以防止具有不同字节字节序的系统出现问题还是有其他好处?
我为这个主题找到了许多关于如何将二进制转换为十六进制和向后转换或某些格式的规范的教程,但没有关于优缺点的信息。
我正在使用 Erlang 在电子邮件服务器和 Spamassassin 之间发送消息。
我想要实现的是检索 SA 完成的测试以生成报告(我正在做某种邮件测试程序)
当 SpamAssassin 回答(通过原始 TCP)时,它会发送一个如下所示的二进制字符串:

<<"SPAMD/1.1 0 EX_OK\r\nContent-length: 728\r\nSpam: True ; 6.3 / 5.0\r\n\r\nReceived: from localhost by debpub1.cs2cloud.internal\r\n\twith SpamAssassin (version 3.4.2);\r\n\tSat, 04 Jan 2020 18:24:37 +0100\r\nFrom: bibi <bibi@XXXXX.local>\r\nTo: <aZphki8N05@XXXXXXXX>\r\nSubject: i\r\nDate: Sat, 4 Jan 2020 18:24:36 +0100\r\nMessage-Id: <3b68dede-f1c3-4f04-62dc-f0b2de6e980a@PPPPPP.local>\r\nX-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on\r\n\tdebpub1.cs2cloud.internal\r\nX-Spam-Flag: YES\r\nX-Spam-Level: ******\r\nX-Spam-Status: Yes, score=6.3 required=5.0 tests=BODY_SINGLE_WORD,\r\n\tDKIM_ADSP_NXDOMAIN,DOS_RCVD_IP_TWICE_C,HELO_MISC_IP,\r\n\tNO_FM_NAME_IP_HOSTN autolearn=no autolearn_force=no version=3.4.2\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"----------=_5E10CA56.0200B819\"\r\n\r\n">>
Run Code Online (Sandbox Code Playgroud)
我把我想拿起的物品加粗:
然后我想像这样序列化:[<<"DKIM_ADSP_NXDOMAIN">>,<<"DOS_RCVD_IP_TWICE_C">>,...]
但这并不容易,术语没有常规的“分隔符”,有 \r\n 或 \r\n\t
我以该表达式开头(在二进制字符串上拆分 ','),但结果不完整
split(BinaryString, ",", all),
case lists:member(<<"HELO_MISC_IP">>, Data3 ) …Run Code Online (Sandbox Code Playgroud) binary-data ×10
binary ×3
c# ×3
binaryfiles ×2
c ×2
.net ×1
bootloader ×1
c++ ×1
database ×1
erlang ×1
file ×1
firmware ×1
fortran ×1
gnuplot ×1
hex ×1
hexdump ×1
memory-dump ×1
process ×1
stream ×1