本文整理汇总了C++中BString::data方法的典型用法代码示例。如果您正苦于以下问题:C++ BString::data方法的具体用法?C++ BString::data怎么用?C++ BString::data使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BString
的用法示例。
在下文中一共展示了BString::data方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
/** Turns a binary tag into a series of ID3_Frame objects attached to the
** tag.
**
** \code
** ID3_Tag myTag;
** uchar header[ID3_TAGHEADERSIZE];
** uchar *buffer;
** luint tagSize;
**
** // get ID3_TAGHEADERSIZE from a socket or somewhere
** // ...
**
** if ((tagSize = ID3_IsTagHeader(ourSourceBuffer)) > -1)
** {
** // read a further 'tagSize' bytes in
** // from our data source
** // ...
**
** if (buffer = new uchar[tagSize])
** {
** // now we will call ID3_Tag::Parse()
** // with these values (explained later)
** myTag.Parse(header, buffer);
**
** // do something with the objects,
** // like look for titles, artists, etc.
** // ...
**
** // free the buffer
** delete [] buffer;
** }
** }
** \endcode
**
** \sa ID3_Frame
** @param header The byte header read in from the data source.
** @param buffer The remainder of the tag (not including the data source)
** read in from the data source.
**/
size_t ID3_Tag::Parse(const uchar header[ID3_TAGHEADERSIZE], const uchar *buffer)
{
size_t size = ID3_Tag::IsV2Tag(header);
if (0 == size)
{
return 0;
}
BString buf;
buf.reserve(ID3_TagHeader::SIZE + size);
buf.append(reinterpret_cast<const BString::value_type *>(header),
ID3_TagHeader::SIZE);
buf.append(reinterpret_cast<const BString::value_type *>(buffer), size);
return this->Parse(buf.data(), buf.size());
}
示例2: readBinary
io::CompressedReader::CompressedReader(ID3_Reader& reader, size_type newSize)
: _uncompressed(new char_type[newSize])
{
size_type oldSize = reader.remainingBytes();
BString binary = readBinary(reader, oldSize);
int dwResult = ::uncompress(_uncompressed,
reinterpret_cast<luint*>(&newSize),
reinterpret_cast<const uchar*>(binary.data()),
oldSize);
if (dwResult != Z_OK)
newSize = 0;
this->setBuffer(_uncompressed, newSize);
}
示例3: et
//.........这里部分代码省略.........
// guess so, let's start checking the v2 tag for frames which are the
// equivalent of the v1 fields. When we come across a v1 field that has
// no current equivalent v2 frame, we create the frame, copy the data
// from the v1 frame and attach it to the tag
// (Scott Wheeler) The above comment was nice in theory, but it wasn't
// first checking (before my hacks) to see if there already was v2 data.
ID3D_NOTICE("id3::v1::parse: read bytes: " << reader.getCur() - beg);
String title = io::readTrailingSpaces(reader, ID3_V1_LEN_TITLE);
field = id3::v2::getTitle(tag);
if (title.size() > 0 && (field.size() == 0 || field == ""))
{
id3::v2::setTitle(tag, title);
}
ID3D_NOTICE( "id3::v1::parse: title = \"" << title << "\"" );
ID3D_NOTICE("id3::v1::parse: read bytes: " << reader.getCur() - beg);
String artist = io::readTrailingSpaces(reader, ID3_V1_LEN_ARTIST);
field = id3::v2::getArtist(tag);
if (artist.size() > 0 && (field.size() == 0 || field == ""))
{
id3::v2::setArtist(tag, artist);
}
ID3D_NOTICE( "id3::v1::parse: artist = \"" << artist << "\"" );
ID3D_NOTICE("id3::v1::parse: read bytes: " << reader.getCur() - beg);
String album = io::readTrailingSpaces(reader, ID3_V1_LEN_ALBUM);
field = id3::v2::getAlbum(tag);
if (album.size() > 0 && (field.size() == 0 || field == ""))
{
id3::v2::setAlbum(tag, album);
}
ID3D_NOTICE( "id3::v1::parse: album = \"" << title << "\"" );
ID3D_NOTICE("id3::v1::parse: read bytes: " << reader.getCur() - beg);
String year = io::readTrailingSpaces(reader, ID3_V1_LEN_YEAR);
field = id3::v2::getYear(tag);
if (year.size() > 0 && (field.size() == 0 || field == ""))
{
id3::v2::setYear(tag, year);
}
ID3D_NOTICE( "id3::v1::parse: year = \"" << year << "\"" );
ID3D_NOTICE("id3::v1::parse: read bytes: " << reader.getCur() - beg);
String comment = io::readTrailingSpaces(reader, ID3_V1_LEN_COMMENT-2);
// fixes bug for when tracknumber is 0x20
BString trackno = io::readBinary(reader, ID3_V1_LEN_COMMENT-28);
if (trackno[0] == '\0')
{
if (trackno[1] != '\0')
{ //we've got a tracknumber
size_t track = trackno[1];
field = id3::v2::getTrack(tag);
if (field.size() == 0 || field == "00")
{
id3::v2::setTrack(tag, track, 0);
}
ID3D_NOTICE( "id3::v1::parse: track = \"" << track << "\"" );
ID3D_NOTICE( "id3::v1::parse: comment length = \"" << comment.length() << "\"" );
}
}
else
{
// trackno[0] != '\0'
const int paddingsize = (ID3_V1_LEN_COMMENT-2) - comment.size();
const char * padding = " "; //28 spaces
if (trackno[1] == '\0' || trackno[1] == 0x20 && trackno[0] != 0x20)
{
// if there used to be spaces they are gone now, we need to rebuild them
comment.append(padding, paddingsize);
comment.append((const char *)trackno.data(), 1);
}
else if (trackno[1] != '\0' && trackno[1] != 0x20 && trackno[0] != 0x20)
{
// if there used to be spaces they are gone now, we need to rebuild them
comment.append(padding, paddingsize);
comment.append((const char *)trackno.data(), 2);
}
}
ID3D_NOTICE( "id3::v1::parse: comment = \"" << comment << "\"" );
if (comment.size() > 0)
{
id3::v2::setComment(tag, comment, STR_V1_COMMENT_DESC, "XXX");
}
ID3D_NOTICE("id3::v1::parse: read bytes: " << reader.getCur() - beg);
// the GENRE field/frame
uchar genre = reader.readChar();
field = id3::v2::getGenre(tag);
if (genre != 0xFF && (field.size() == 0 || field == ""))
{
id3::v2::setGenre(tag, genre);
}
ID3D_NOTICE( "id3::v1::parse: genre = \"" << (int) genre << "\"" );
ID3D_NOTICE("id3::v1::parse: read bytes: " << reader.getCur() - beg);
return true;
}
示例4: parse
bool mm::parse(ID3_TagImpl& tag, ID3_Reader& rdr)
{
io::ExitTrigger et(rdr);
ID3_Reader::pos_type end = rdr.getCur();
if (end < rdr.getBeg() + 48)
{
ID3D_NOTICE( "mm::parse: bailing, not enough bytes to parse, pos = " << end );
return false;
}
rdr.setCur(end - 48);
String version;
{
if (io::readText(rdr, 32) != "Brava Software Inc. ")
{
ID3D_NOTICE( "mm::parse: bailing, couldn't find footer" );
return false;
}
version = io::readText(rdr, 4);
if (version.size() != 4 ||
!isdigit(version[0]) || version[1] != '.' ||
!isdigit(version[2]) ||
!isdigit(version[3]))
{
ID3D_WARNING( "mm::parse: bailing, nonstandard version = " << version );
return false;
}
}
ID3_Reader::pos_type beg = rdr.setCur(end - 48);
et.setExitPos(beg);
if (end < 68)
{
ID3D_NOTICE( "mm::parse: bailing, not enough bytes to parse offsets, pos = " << end );
return false;
}
rdr.setCur(end - 68);
io::WindowedReader dataWindow(rdr);
dataWindow.setEnd(rdr.getCur());
uint32 offsets[5];
io::WindowedReader offsetWindow(rdr, 20);
for (size_t i = 0; i < 5; ++i)
{
offsets[i] = io::readLENumber(rdr, sizeof(uint32));
}
size_t metadataSize = 0;
if (version <= "3.00")
{
// All MusicMatch tags up to and including version 3.0 had metadata
// sections exactly 7868 bytes in length.
metadataSize = 7868;
}
else
{
// MusicMatch tags after version 3.0 had three possible lengths for their
// metadata sections. We can determine which it was by searching for
// the version section signature that should precede the metadata section
// by exactly 256 bytes.
size_t possibleSizes[] = { 8132, 8004, 7936 };
for (size_t i = 0; i < sizeof(possibleSizes)/sizeof(size_t); ++i)
{
dataWindow.setCur(dataWindow.getEnd());
// Our offset will be exactly 256 bytes prior to our potential metadata
// section
size_t offset = possibleSizes[i] + 256;
if (dataWindow.getCur() < offset)
{
// if our filesize is less than the offset, then it can't possibly
// be the correct offset, so try again.
continue;
}
dataWindow.setCur(dataWindow.getCur() - offset);
// now read in the signature to see if it's a match
if (io::readText(dataWindow, 8) == "18273645")
{
metadataSize = possibleSizes[i];
break;
}
}
}
if (0 == metadataSize)
{
// if we didn't establish a size for the metadata, then something is
// wrong. probably should log this.
ID3D_WARNING( "mm::parse: bailing, couldn't find meta data signature, end = " << end );
return false;
}
// parse the offset pointers to determine the actual sizes of all the
// sections
size_t sectionSizes[5];
//.........这里部分代码省略.........
示例5: isr
int
main(size_t argc, const char** argv)
{
ID3D_INIT_DOUT();
ID3D_INIT_WARNING();
ID3D_INIT_NOTICE();
ID3_IStreamReader isr(cin);
BString orig = io::readAllBinary(isr);
cout << "input size: " << orig.size() << endl;
cout << endl;
cout << "=== Testing Synchronization ===" << endl;
BString synced;
{
io::BStringReader sr(orig);
io::UnsyncedReader ur(sr);
synced = io::readAllBinary(ur);
}
cout << "synced size: " << synced.size() << endl;
BString unsynced;
{
io::BStringWriter sw(unsynced);
io::UnsyncedWriter uw(sw);
uw.writeChars(synced.data(), synced.size());
}
cout << "unsynced size: " << unsynced.size() << endl;
BString resynced;
{
io::BStringReader sr(unsynced);
io::UnsyncedReader ur(sr);
resynced = io::readAllBinary(ur);
}
cout << "resynced size: " << resynced.size() << endl;
if (unsynced == orig)
{
cout << "orig == unsynced" << endl;
}
else
{
cout << "orig != unsynced" << endl;
}
if (synced == resynced)
{
cout << "synced == resynced" << endl;
}
else
{
cout << "synced != resynced" << endl;
}
cout << endl;
cout << "=== Testing Trailing Spaces ===" << endl;
String text;
{
io::StringWriter sw(text);
io::writeTrailingSpaces (sw, "hello, world", 50);
}
cout << "new text = \"" << text << "\"" << endl;
String origText;
{
io::StringReader sr(text);
origText = io::readTrailingSpaces(sr, 100);
}
cout << "orig text = \"" << origText << "\"" << endl;
cout << endl;
cout << "=== Testing Binary Numbers ===" << endl;
String number;
{
io::StringWriter sw(number);
io::writeBENumber(sw, 1234567890, 4);
}
cout << "binary number:";
for (size_t i = 0; i < number.size(); ++i)
{
cout << " 0x" << hex << (size_t) (0xFF & number[i]) << dec;
//.........这里部分代码省略.........