我创建了这个程序:
#include <iostream>
#include <fstream>
using namespace std;
int main () {
fstream file;
file.open("test.bin", ios::in | ios::out | ios::binary);
if(!file.is_open())
{
return -1;
}
int n = 5;
int x;
file.write(reinterpret_cast<char*>(&n), sizeof(n));
file.read(reinterpret_cast<char*>(&x), sizeof(x));
std::cout<<x;
file.close();
std::cin.ignore();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
应该将整数"n"写入.bin文件"test.bin",然后将数据从"test.bin"读入整数"x",然后在屏幕上显示"x".
当我运行程序时,它不显示5,而是显示-842150451.为什么会发生这种情况,我该如何解决?
byte[] binaryData = new Byte[pngStream.Length];
long bytesRead = pngStream.Read(binaryData, 0, (int)pngStream.Length);
string base64String = System.Convert.ToBase64String(binaryData,
0,
binaryData.Length);
Run Code Online (Sandbox Code Playgroud)
我有Byte数组的二进制数据.有人知道如何将它保存到silverlight3或c#中的任何图像文件(png或jpg)中吗?
谢谢
我正在使用python msilib库读取MSI文件.我的目标是从二进制表中提取[二进制数据]并转储到文件中.(使用ORCA工具,我们可以通过双击[Binary Data]单元格并写入文件来提取二进制数据)
我找不到任何msilib方法来获取二进制数据.它有使用Record.GetString(field)获取字符串数据的方法.但正如预期的那样,这对[二进制数据]不起作用并给出错误.
这是代码片段
import msilib
# msi file path which is to be read
msiFilePath = "C:/msi/test.msi"
dbObj = msilib.OpenDatabase(msiFilePath, msilib.MSIDBOPEN_READONLY)
sqlQuery = "select * from Binary"
view = dbObj.OpenView(sqlQuery)
view.Execute(None)
cur_record = viewObj.Fetch()
# In Binary table; Column no 1 have string data and Column # 2 have [Binary Data]
cur_record.GetString(2)
Run Code Online (Sandbox Code Playgroud)
执行时: -
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
cur_record.GetString(2)
_msi.MSIError: unknown error 70c
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我正在解决我的项目并遇到一些问题,我搜索了它,但找不到完整的学习资源,我需要的是使用我的Java程序将图像存储在SQL Server数据库中,并且需要返回检索,图像尺寸不大,介于30到50 K之间,我可以使用toolKit中的getImage()方法从我的磁盘加载图像
Image imm = Toolkit.getDefaultToolkit().getImage("URl");
Run Code Online (Sandbox Code Playgroud)
,但我不知道如何将该图像转换为二进制格式并存储在数据库中,然后检索从数据库返回.我想通过查看几个站点将它存储在VarBinary中,我发现SQL Server中的图像类型很快就会退回.
我想知道,只要所有包含的赋值都没有副作用,除了将二进制值传递给地址,将源对象指针中的字节复制到目标而不是将每个目标成员分配给每个目标成员都不是更有效来源会员?
作为一个子问题...我想知道读取模式如何影响内存控制器负载.显然,当MC从正确对齐的地址读取其全宽时,它是最有效的.也许将所有成员合并为一系列最大宽数据类型以进行对齐会更有效,例如,如果MC为64位且成员数据集为10个字节,则复制64位和16位值,即使成员说10 char秒,所以复制这种方式会使MC比一次复制每个成员字符更好.
我有一个用Java语言编写的Uint8Array,我想将其内容打印到控制台,例如
255, 19, 42, 0
Run Code Online (Sandbox Code Playgroud)
这是我的代码,当前显示一个空字符串
var bytes = new Uint8Array(data);
var debugBytes = "";
for(var i=0; i<bytes.byteLength; i++) {
debugBytes.concat(bytes[i].toString());
debugBytes.concat(",");
}
console.log('Processing packet [' + bytes[1] + '] ' + debugBytes);
Run Code Online (Sandbox Code Playgroud)
如果设置了断点,我可以在调试器中看到数据,因此字节肯定会被填充。当我尝试通过另一种方法进行打印时,它将所有字节转换为ASCII,但是我的数据大部分不在ASCII可打印范围内。
JavaScript中有与printf()等效的东西吗?
我正在尝试使旧方法异步。
它从数据库中获取 BLOB 并将其作为文件写入磁盘。
但是,没有异步版本的BinaryWriter.
我可以用StreamWriter代替吗?因为它有WriteAsync方法。有什么区别?有什么缺点吗?
部分代码:
OracleParameter returnParam = new OracleParameter("blob", OracleDbType.Blob);
command.Parameters.Add(returnParam);
await command.ExecuteNonQueryAsync();
OracleBlob blob = returnParam.Value as OracleBlob;
byte[] data = new byte[blob.Length];
await blob.ReadAsync(data, 0, Convert.ToInt32(blob.Length));
fileFullPath = Path.Combine(folder, fileName);
using (FileStream fs = new FileStream(fileFullPath, FileMode.OpenOrCreate, FileAccess.Write))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
bw.Write(data); //NO ASYNC METHOD HERE
logger.Debug("Finished writing file {0} to disk", fileFullPath);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以改成下面这样吗?
OracleParameter returnParam = new OracleParameter("blob", OracleDbType.Blob);
command.Parameters.Add(returnParam);
await …Run Code Online (Sandbox Code Playgroud) C#/.NET 中是否有任何方法可以“叠加”或映射 a 到现有就地MemoryStream之上,以便数据不会被不必要地复制?byte[]
在尝试将 a 转换byte[]为流时,标准解决方案是使用 theMemoryStream及其Write函数,如下所示:
byte[] myArray = new byte[10]; // or, e.g. retrieve from DB
MemoryStream stream = new MemoryStream();
stream.Write(myArray, 0, myArray.Length);
Run Code Online (Sandbox Code Playgroud)
或者,这可以缩短为:
byte[] myArray = new byte[10]; // or, e.g. retrieve from DB
MemoryStream stream = new MemoryStream(myArray);
Run Code Online (Sandbox Code Playgroud)
这实际上是同一件事。
这样做的问题是必须将数组的全部内容复制到流中,从而占用 2 倍的内存。考虑到字节数组可能非常大,这似乎不太令人满意。数据已经在内存中的连续块中,所以......
内存流可以以某种方式就地映射到字节数组吗?
我想hdr用in.wav文件中的数据填充(struct) 变量,我想将文件的前 64 个字节复制in.wav到另一个文件 ( out.wav)。
但!fread()第二次使用时,in.wav从fread()第一次使用结束的地方开始复制。为什么?
#include <stdio.h>
#include <stdlib.h>
typedef struct FMT
{
char SubChunk1ID[4];
int SubChunk1Size;
short int AudioFormat;
short int NumChannels;
int SampleRate;
int ByteRate;
short int BlockAlign;
short int BitsPerSample;
} fmt;
typedef struct DATA
{
char Subchunk2ID[4];
int Subchunk2Size;
int Data[441000]; // 10 secs of garbage. he-he)
} data;
typedef struct HEADER
{
char ChunkID[4];
int ChunkSize;
char Format[4];
fmt S1; …Run Code Online (Sandbox Code Playgroud) 请考虑以下用于整数类型的代码:
template <class T>
std::string as_binary_string( T value ) {
return std::bitset<sizeof( T ) * 8>( value ).to_string();
}
int main() {
unsigned char a(2);
char b(4);
unsigned short c(2);
short d(4);
unsigned int e(2);
int f(4);
unsigned long long g(2);
long long h(4);
std::cout << "a = " << +a << " " << as_binary_string( a ) << std::endl;
std::cout << "b = " << +b << " " << as_binary_string( b ) << std::endl;
std::cout << "c = …Run Code Online (Sandbox Code Playgroud) 正如所看到的在这里,他们也行ZG9udGJlYWhhdGVyc3RhcnR1cCtoYWNrZXJuZXdzQGdtYWlsLmNvbQ==.
如何解码这一系列的Base64?